
У меня есть CSV-файл, и я хочу увидеть числа, которые начинаются с , 0.99
и индекс их строки, который является первой ячейкой этой строки.
Вот что у меня есть на данный момент:
cat fil.csv | grep '0\\.99'| tee > (cut -d, -f1) | tr , \\n | grep '0\\.99'
вход:
id, f1,f2,f3
f1,0.54,0.12,0.432
f2,0.1231,0.99999,0.99832
f3,0.121,nan,0.12321
f4,0.99712,0.121,0.434
желаемый результат: в идеале я хочу это, но это было бы слишком сложно для oneliner:
f2,0.99999,0.99832
f4,0.99712
Меня это вполне устраивает, ведь именно этого я и хочу от написанной мной команды:
f2
0.99999
0.99832
f4
0.99712
решение1
С awk:
$ awk -F, '$0~"0\\.99*"{printf $1;for(i=1;i<=NF;i++){if($i~"0\\.99*"){printf ","$i}};printf "\n"}'
f2,0.99999,0.99832
f4,0.99712
В более удобной для чтения форме:
$ awk -F, '
$0~"0\\.99*"{
printf $1
for(i=1; i<=NF; i++){
if($i~"0\\.99*"){
printf ","$i
}
}
printf "\n"
}
'
решение2
Если вы можете использовать perl
:
$ perl -F, -anle '
BEGIN { $, = "," }
@h = grep { /^0\.99/ } @F;
print $F[0], @h if @h;
' file
f2,0.99999,0.99832
f4,0.99712