Grep csv 檔案的符合儲存格和該行的索引

Grep csv 檔案的符合儲存格和該行的索引

我有 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

相關內容