Awk 从另一个文件的第2列中提取所有负数
我有一个很长的数据文件“file.dat”,有两列。 这里我放了一小部分。我想将第2列中的所有负数提取到另一个文件中,比如file2.dat,同样地,将同一列中的正数提取到另一个文件file3.datAwk 从另一个文件的第2列中提取所有负数,awk,sed,grep,Awk,Sed,Grep,我有一个很长的数据文件“file.dat”,有两列。 这里我放了一小部分。我想将第2列中的所有负数提取到另一个文件中,比如file2.dat,同样地,将同一列中的正数提取到另一个文件file3.dat 4.0499 -7.1787 4.0716 -7.1778 4.0932 -7.1778 4.1148 -7.1785 4.1365 -7.1799 4.1581 -7.1819 4.1798 -7.1843
4.0499 -7.1787
4.0716 -7.1778
4.0932 -7.1778
4.1148 -7.1785
4.1365 -7.1799
4.1581 -7.1819
4.1798 -7.1843
4.2014 -7.1868
4.2231 -7.1890
4.2447 -7.1902
4.2663 -7.1900
4.2880 -7.1886
<-------Note: this kind of break is also there in many places
0.0000 2.1372
0.0707 2.1552
0.1414 2.2074
0.2121 2.2864
0.2828 2.3791
0.3535 2.4646
0.4242 2.5189
0.4949 2.5207
0.5655 2.5098
正数文件3.dat的预期结果
-7.1787
-7.1778
-7.1778
-7.1785
-7.1799
-7.1819
-7.1843
-7.1868
-7.1890
-7.1902
-7.1900
-7.1886
2.1372
2.1552
2.2074
2.2864
2.3791
2.4646
2.5189
2.5207
2.5098
我找到的最近的解决方案
由于我缺乏知识,这个解决方案对我不起作用
使用
awk
非常简单。您只需检查第二列中的值,然后根据其值将其写出,例如
awk '$2<0 {print $2 > "negative.dat"} $2>=0 {print $2 > "positive.dat"}' file
下列各项中的正值:
$cat positive.dat
2.1372
2.1552
2.2074
2.2864
2.3791
2.4646
2.5189
2.5207
2.5098
David的答案很好,下面是一个较短的awk
使用三元条件的一行程序:
awk'NF>1{print$2>($2<0?“neg.dat”:“pos.dat”)}文件
Wow:)。非常感谢,真的很快。我真的很感谢你的帮助。不客气,祝你的脚本编写好运!Awk是文字处理的瑞士军刀,非常值得学习再次感谢:)我会尽我最大的努力学习:)谢谢你,@anubhava,我感谢你的帮助:)@sai,很好,这些代码(David sir和anubhava sir的代码)为你工作,你也可以投票选出所有有帮助的答案,鼓励他们欢呼,快乐学习。