Awk

僅從另一個文件中減去偶數行的特定列

  • July 19, 2022

我有兩個具有重複一般結構的長文件,

File1:

AA 100

BB 10

File2:

AA 100

BB 1

我想從 File1 的 File2 的偶數行中減去第 2 列,但要維護/列印其他資訊,以便保留。

期望的輸出:

AA 100

BB 9

我為此寫了awk

awk '{a=$2;getline<f;$2-=a}!(NR % 2)' f=File1 File2

這會產生:

BB 9

哪個做減法並列印結果很好,但是我在添加其他數據時遇到了麻煩。

我怎樣才能在這個減法旁邊列印其他數據?

像這樣的東西?

awk '{a=$2;getline<f;(NR%2)?$2:$2-=a;print}' f=File1 File2
$ paste file1 file2 | awk '{print $1, $2 - (NR%2 ? 0 : $4)}'
AA 100
BB 9

或者如果您想要一個僅限 awk 的解決方案:

$ awk 'NR==FNR{if (!(NR%2)) a[NR]=$2; next} {$2 -= a[FNR]} 1' file2 file1
AA 100
BB 9

如果您正在考慮getline為此使用,請閱讀http://awk.freeshell.org/AllAboutGetline,以便您了解這樣做的問題。

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