Awk
僅從另一個文件中減去偶數行的特定列
我有兩個具有重複一般結構的長文件,
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,以便您了解這樣做的問題。