Awk 从另一个文件的第2列中提取所有负数

Awk 从另一个文件的第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

我有一个很长的数据文件“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.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的代码)为你工作,你也可以投票选出所有有帮助的答案,鼓励他们欢呼,快乐学习。