貓文件1:比較兩個文件,並從提取的信息都用awk
a
b
c
d
e
貓文件2:
a 10
c 20
e 30
f 40
所需的輸出文件是:
a 10
b
c 20
d
e 30
f 40
我試着使用awk但我結束了file1的所有行重複。 非常感謝
貓文件1:比較兩個文件,並從提取的信息都用awk
a
b
c
d
e
貓文件2:
a 10
c 20
e 30
f 40
所需的輸出文件是:
a 10
b
c 20
d
e 30
f 40
我試着使用awk但我結束了file1的所有行重複。 非常感謝
讀入這兩個文件並將它們散列到一個數組(a
)。如果您在file2
之前閱讀file1
,碰撞將對您有利。在AWK:
$ awk '{a[$1]=$0} END{for(i in a) print a[i]}' file1 file2
a 10
b
c 20
d
e 30
f 40
解釋:
{
a[$1]=$0 # hash all records to a
}
END { # after processing both files
for(i in a) # iterate thru every key in a
print a[i] # and output their values
}
由於對for(i in a)
性質的輸出順序是隨機的。
另一awk
和少聰明的方式來做到這一點
$ awk 'NR==FNR {a[$1]=$2; next}
$1 in a {$2=a[$1]; delete a[$1]}
1;
END {for(k in a) print k,a[k]}' file2 file1
a 10
b
c 20
d
e 30
f 40
不知道awk
對於OP硬性要求,但這裏是一個使用join
這似乎更適合於手頭工作的替代解決方案(如@ shellter也指出):
$ join -a1 -a2 file1 file2
控制輸出的邏輯是什麼? –
「我試過使用awk」..你需要在你的Q中包含代碼,所以我們可以幫助解決它!否則嘗試搜索'[linux] join'或'[bash] join'並閱讀'man join'。祝你好運。 – shellter