Csv 如何在任何列中打印单元格值小于0.2的行?

Csv 如何在任何列中打印单元格值小于0.2的行?,csv,awk,Csv,Awk,我有一个包含100多列和1000多行的csv文件(myfile.csv),我需要将标题和每一行的单元格值小于0.2 in至少一列(无论哪列)打印到一个新文件(newfile_0.2.csv)。我需要整排人 我只能找到一个方法来做这件事 这是我的失败尝试列表(我对编码非常陌生): awk'(NR==1)| |($0

我有一个包含100多列和1000多行的csv文件(myfile.csv),我需要将标题和每一行的单元格值小于0.2 in至少一列(无论哪列)打印到一个新文件(newfile_0.2.csv)。我需要整排人

我只能找到一个方法来做这件事

这是我的失败尝试列表(我对编码非常陌生):

awk'(NR==1)| |($0<0.2)'myfile.csv>newfile_0.2.csv
awk-F“,“'BEGIN$0<0.2{print$0}”myfile.csv>newfile_0.2.csv
awk-F“,”{OFS=“,”}开始{$0<0.2}{print$0}'myfile.csv>newfile_0.2.csv
awk'{FS=“,”}{OFS=“,”}开始{$0<0.2}{print$0}'myfile.csv>newfile_0.2.csv
awk-F“,“{if($0<0.2)print$0}”myfile.csv>newfile_0.2.csv
读行时;doawk-F“,”{if($0<0.2)打印$0}”行;完成newfile\u 0.2.csv

读行时;do echo$line | awk-F“,”{for(i=1;i基于您的努力,我绘制了这个草图:

# file: script.awk
BEGIN { FS = OFS = "," }
{ # for every row
  hit = 0 ; for (i = 1; i <= NF && !hit; ++i) { if ($i < 0.2) hit = 1 }
  if (hit) print $0
  next
}
以防万一,这可能是个好主意

玩这个游戏,我得到了这个(甚至更短)版本:

#文件:script.awk
开始{FS=OFS=“,”}
{#每行

对于(i=1;i)整行可能是使用
$0
@pdalcinmartins访问的,我不确定下一个
是否真的有必要。但是,我确信这不会造成伤害…您可能需要设置
OFS=“,”
too@pdalcinmartins因此,不需要
next
,即不匹配任何规则的行被简单地使用。(我记得的实际上是
lex
/
flex
的行为,它简单地将任何不匹配的模式反映到
yyout
# file: script.awk
BEGIN { FS = OFS = "," }
{ # for every row
  hit = 0 ; for (i = 1; i <= NF && !hit; ++i) { if ($i < 0.2) hit = 1 }
  if (hit) print $0
  next
}
$ cat >myfile.csv <<EOF
> 1,1,1,1
> 1,0.1,1,1
> 2,2,2,2
> 0,1,2,3
> 3,3,3,3.0
> EOF

$ awk -f script.awk myfile.csv
1,0.1,1,1
0,1,2,3
$ LANG=C
# file: script.awk
BEGIN { FS = OFS = "," }
{ # for every row
  for (i = 1; i <= NF; ++i) { if ($i < 0.2) { print $0 ; break } }
}
$ awk -F , -v OFS=, '{ for (i = 1; i <= NF; ++i) { if ($i < 0.2) { print $0 ; break } } }' test-filter-0.2.txt
1,0.1,1,1
0,1,2,3