Shell-Script

在列條目的符號更改的文件中查找並列印發生這種情況的第一行

  • March 22, 2019

我有多個文件,每個文件有三列。我想監視給定列條目首先更改符號的位置(即從負到正),以便我將首先發生在另一個文件中的那一行保存。在下面的範例中,我想監視第一列中符號的變化。

-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將輸出重定向到另一個文件。

引用自:https://unix.stackexchange.com/questions/507942