【发布时间】:2016-06-12 14:18:50
【问题描述】:
我想从输入文件的每一行中找到负数(相同的值)。 如果一行中没有负数,它将打印 0。如果负数出现不止一次,它将打印一次负数。例如 输入文件是(input.txt):
1 0 0 0 0 0 0 0 0
1 1 -1 0 -1 0 1 0 0
1 1 0 -1 0 0 1 0 -1
1 1 0 0 -1 0 0 0 0
想要的输出是:
0
-1
-1
-1
目前我正在使用
awk '{for(i=1; i<=NF;i++)if($i ~ /^-/) {printf "%s\n",$i}}' input.txt > output
但它不会在第一行产生 0,而是打印所有 -1。 有没有聪明的办法解决这个问题?
【问题讨论】:
-
如果输入的最后一行是
1 1 0 0 -1 0 -5 0 -2那么输出什么? -
不,每行只有相同类型的 -ve 数字。比如在第 2 或第 3 或第 4 行中的 -1。
-
所以每个单元格中只能有
-1 or 0 or 1? -
如果只有一个负数会怎样?您想要的输出似乎表明一个被视为许多,尽管在您的描述中没有定义。
-
是的。但是,如果脚本不知道 +ve 数字并且只看到每行中相同的 -ve 数字(如 -1),那就太好了。