Awk
根據第二列加入兩個按數字排序的文件
我有兩個文件
文件 1 包含
2*J=0 EXP= 0.00000 2*J=4 EXP= 1.27911 2*J=8 EXP= 1.57613 2*J=12 EXP= 1.69134 2*J=10 EXP= 2.72705 2*J=16 EXP= 4.55689 2*J=20 EXP= 5.62138
文件 2 包含
2*J=0 EXC= 0.00000 2*J=8 EXC= 1.21836 2*J=4 EXC= 1.59642 2*J=12 EXC= 1.78359 2*J=10 EXC= 2.69484 2*J=16 EXC= 7.24518 2*J=20 EXC= 7.32688
我想加入這兩個文件,這樣輸出將是
2*J=0 EXP= 0.00000 EXC= 0.00000 2*J=4 EXP= 1.27911 EXC= 1.59642 2*J=8 EXP= 1.57613 EXC= 1.21836 2*J=12 EXP= 1.69134 EXC= 1.78359 2*J=10 EXP= 2.72705 EXC= 2.69484 2*J=16 EXP= 4.55689 EXC= 7.24518 2*J=20 EXP= 5.62138 EXC= 7.32688
使用 GNU awk,我們可以控制輸出的排序方式:
加入者.awk
#!/usr/bin/env -S gawk -f FILENAME == ARGV[1] { f1[$1] = $2 OFS $3 sort_key[$1] = $3 next } { f2[$1] = $2 OFS $3 } function sorter(idx1, val1, idx2, val2) { return sort_key[idx1] - sort_key[idx2] } END { PROCINFO["sorted_in"] = "sorter" for (key in f1) print key, f1[key], f2[key] }
然後
$ gawk -f joiner.awk file1 file2 2*J=0 EXP= 0.00000 EXC= 0.00000 2*J=4 EXP= 1.27911 EXC= 1.59642 2*J=8 EXP= 1.57613 EXC= 1.21836 2*J=12 EXP= 1.69134 EXC= 1.78359 2*J=10 EXP= 2.72705 EXC= 2.69484 2*J=16 EXP= 4.55689 EXC= 7.24518 2*J=20 EXP= 5.62138 EXC= 7.32688
記錄了“PROCINFO”魔法:https ://www.gnu.org/software/gawk/manual/html_node/Controlling-Array-Traversal.html