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