Awk
使用awk合併列?(或其他建議)
我正在努力提高效率,需要一個腳本或命令解決方案。
假設我製作了一個包含 2 列的文件,或者製作了包含一列的兩個文件,以更容易者為準:
AA1 B2 ZZ1 YYY XX1 AA2 B2 ZZ2 YYY XX2 AA3 B3 ZZ3 YYY XX3 AA4 B4 ZZ4 YYY XX4 ZZ5 YYY XX5 ZZ6 YYY XX6 ZZ7 YYY XX7
條目的數量是奇數。現在,我想創建一個新文件(最好還有一些其他輸入,儘管讓我們從這裡開始),它將第一列中的每個值與第二列中的每個值結合起來(它們的行數總是不相等) 並將結果輸出為:
AA1 B2 ZZ1 YYY XX1 AA1 B2 ZZ2 YYY XX2 [...] AA4 B4 ZZ1 YYY XX1 AA4 B4 ZZ2 YYY XX2
因此,按順序循環遍歷第 1 列中的所有值,並按順序將它們與第 2 列中的每個值組合。
假設您有以下文件:
$ cat file1 ZZ1 YYY XX1 ZZ2 YYY XX2 ZZ3 YYY XX3 ZZ4 YYY XX4 ZZ5 YYY XX5 ZZ6 YYY XX6 ZZ7 YYY XX7 $ cat file2 AA1 B2 AA2 B2 AA3 B3 AA4 B4
然後使用這個
awk
:awk 'FNR==NR{a[c++]=$0} FNR!=NR{for(i in a){print $0,a[i]}}' file1 file2
FNR==NR
僅適用於第一個文件file1
a[c++]=$0
填充一個名為的數組a
,其內容為file1
FNR!=NR
僅適用於第二個文件file2
for(i in a)
通過數組循環a
…print $0,a[i]
…並列印來自file2
數組的行和內容。出局:
AA1 B2 ZZ1 YYY XX1 AA1 B2 ZZ2 YYY XX2 AA1 B2 ZZ3 YYY XX3 AA1 B2 ZZ4 YYY XX4 AA1 B2 ZZ5 YYY XX5 AA1 B2 ZZ6 YYY XX6 AA1 B2 ZZ7 YYY XX7 AA2 B2 ZZ1 YYY XX1 AA2 B2 ZZ2 YYY XX2 AA2 B2 ZZ3 YYY XX3 AA2 B2 ZZ4 YYY XX4 AA2 B2 ZZ5 YYY XX5 AA2 B2 ZZ6 YYY XX6 AA2 B2 ZZ7 YYY XX7 AA3 B3 ZZ1 YYY XX1 AA3 B3 ZZ2 YYY XX2 AA3 B3 ZZ3 YYY XX3 AA3 B3 ZZ4 YYY XX4 AA3 B3 ZZ5 YYY XX5 AA3 B3 ZZ6 YYY XX6 AA3 B3 ZZ7 YYY XX7 AA4 B4 ZZ1 YYY XX1 AA4 B4 ZZ2 YYY XX2 AA4 B4 ZZ3 YYY XX3 AA4 B4 ZZ4 YYY XX4 AA4 B4 ZZ5 YYY XX5 AA4 B4 ZZ6 YYY XX6 AA4 B4 ZZ7 YYY XX7