2016-04-27 85 views
2
空間

我的問題是: 我有文件1:如何用sed裏面AWK

3119 
3359 
1359 
... 

和file2

2222 abc 
3359 def    <---- this is a match 
4444 ghi 
... 

而且我想修改每一個地方,從文件1索引行在文件2中找到字符串前綴。結果將是:

2222 abc 
3359 PREFIXdef    <---- this is a match 
4444 ghi 
... 

我想出了這個解決方案:

sed `cat file1.txt | awk '{print "-e s/"$1"/"$1"PREFIX./"}'`<<<"`cat file2.txt`" 

這給這樣的結果:

2222 abc 
3359PREFIX def    <---- this is a match 
4444 ghi 
... 

我怎樣才能PREFIX前添加一個空格,刪除後的一個?我有一個錯誤 (命令未結束)

理想我想補充約2撇號「S/XX/XX」:

sed `cat file1.txt | awk '{print "-e 's/"$1" /"$1" PREFIX./'"}'`<<<"`cat file2.txt`" 

但我不能逃脫「」!

+0

我強烈建議你讀的書有效AWK編程,第4版,在嘗試更多文本操作之前,阿諾德羅賓斯。 –

回答

6

此awk命令可以達到從第一個文件的所有第1列到一個關聯數組,然後檢查搞定,對文件2:

awk 'FNR==NR{a[$1]; next} $1 in a{$2 = "PREFIX" $2} 1' file1 file2 

2222 abc 
3359 PREFIXdef 
4444 ghi 
+1

令人難以置信的簡單! :D – sjsam

+0

太好了,謝謝! 我可以添加這個來考慮在我的文件中有作爲分隔符的選項卡: awk -v OFS ='\ t'... – user319869

+0

在這種情況下,OFS ='\ t''是正確的獲取方式正確的輸出。 – anubhava