Shell-Script
在列條目的符號更改的文件中查找並列印發生這種情況的第一行
我有多個文件,每個文件有三列。我想監視給定列條目首先更改符號的位置(即從負到正),以便我將首先發生在另一個文件中的那一行保存。在下面的範例中,我想監視第一列中符號的變化。
-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
以查看另一個欄位):$ 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
將輸出重定向到另一個文件。