我有多个文件,每个文件包含三列。我想监视给定列条目第一次更改符号的位置(即从负到正),以便我将第一次发生这种情况的行保存到另一个文件中。在下面的示例中,我想监视第一列中符号的变化。
-1 2 4 -4 3 5 -2 4 6 1 2 4 2 4 5 2 3 4 -4 5 6 -3 4 6
该代码应该保存该行-2 4 6到另一个文件。
答案1
如果改变是总是从负数到正数非负数,这应该可以。它只是打印上一行,并在字段 1 中看到非负值时退出(更改数字以$1
查看另一个字段):
$ awk '$1 >= 0 { print prev; exit; } { prev = $0; }' < inputfile
-2 4 6
如果可以以任何一种方式进行更改,我们需要将符号存储在前一行并与其进行比较(这里,有两个地方需要字段编号,因此它取自由 设置的变量-vfield=1
):
$ awk -vfield=1 'function sign(x) { if (x < 0) return -1; return +1; }
NR != 1 && sign($field) != prevsign { print prevline; exit; }
{ prevline = $0; prevsign = sign($field) }' < inputfile
在这两种情况下,您当然可以使用> outputfile
将输出重定向到另一个文件。