我想用awk/sed
處理以下兩個文件(A.TXT和b.txt),並得到結果 cat a.txt
如何用awk/sed來處理這兩個文件得到的結果,我想
a UK
b Japan
c China
d Korea
e US
而且cat b.txt
導致
c Russia
e Canada
我需要的結果如下:
a UK
b Japan
c Russia
d Korea
e Canada
我想用awk/sed
處理以下兩個文件(A.TXT和b.txt),並得到結果 cat a.txt
如何用awk/sed來處理這兩個文件得到的結果,我想
a UK
b Japan
c China
d Korea
e US
而且cat b.txt
導致
c Russia
e Canada
我需要的結果如下:
a UK
b Japan
c Russia
d Korea
e Canada
嘗試:
awk 'FNR==NR{A[$1]=$NF;next} {printf("%s %s\n",$1,$1 in A?A[$1]:$NF)}' b.txt a.txt
檢查這裏的條件FNR == NR這將是隻有當讀取第一個文件(b.txt)TRUE。然後創建一個名爲A的數組,其索引爲$ 1,並具有值最後一列。然後使用printf打印2個字符串,其中第一個字符串是$ 1,另一個是如果a.txt中的$ 1存在於數組A中,則打印數組A的索引爲$ 1的值,否則打印a.tzt本身的最後一列。
編輯:因爲OP有馬車字符到Input_files所以請刪除他們也遵循。
tr -d '\r' <b.txt> temp_b.txt && mv temp_b.txt b.txt
你有正確的想法,但 - 爲什麼使用名爲「A」的數組來表示名爲「b」的文件的內容,特別是當其他文件被命名爲「a」時,爲什麼要混淆你的代碼?不要將所有大寫變量名稱用於在線討論的所有常見原因。爲了便於跨awk版本添加三元表達式的加括號(某些awks會在某些情況下會出現語法錯誤)。爲什麼在簡單打印時使用printf呢?當你的代碼依賴於只有2個字段時,爲什麼使用$ NF而不是$ 2?請參閱https://stackoverflow.com/a/44311894/1745001。 –
有時第一行不會改變,其餘的都可以。我不知道爲什麼,你能給我一些提示 –
請給我們展示一些例子,我們可以幫助更多。 – RavinderSingh13
您可以使用下面的一行:
join -a 1 -a 2 a.txt <(awk '{print $1, "--", $0, "--"}' < b.txt) | sed 's/ --$//' | awk -F ' -- ' '{print $NF}'
我們用awk前綴b.txt每一行的一個鍵和--
以後給我們一個分割點:
<(awk '{print $1, "--", $0, "--"}' < b.txt)
使用join命令加入公共密鑰上的文件。該-a 1
選項告訴命令
join -a 1 -a 2 a.txt <(awk '{print $1, "--", $0, "--"}' < b.txt)
用sed刪除--
部分是上線的一些終端:
sed 's/ --$//'
用awk在每行的最後一個項目:
awk -F ' -- ' '{print $NF}'
用awk:
先填充aray/hash a
與完整行($0
)並使用此行中的第一列($1
)作爲索引。最後,用循環打印所有數組/散列a
的元素。
awk '{a[$1]=$0} END{for(i in a) print a[i]}' file1 file2
輸出:
a UK b Japan c Russia d Korea e Canada
$ awk 'NR==FNR{b[$1]=$2;next} {print $1, ($1 in b ? b[$1] : $2)}' b.txt a.txt
a UK
b Japan
c Russia
d Korea
e Canada
你嘗試過什麼解決呢? – Sundeep
[編輯]你的問題,並使用'{}'按鈕來格式化你的輸入,輸出和代碼。 –
謝謝。我試過用awk來解決這個問題。不過,我是awk的新手。你們能給我一些提示嗎?謝謝 –