2013-01-22 56 views
-1

這是我正在嘗試做的。需要用file1中的字符串替換file2中的字符

文件1:

abc 
bcd 
cde 
def 
efg 
fgh 
ghi 

文件2:

ip:/vol0/scratch/& 
ip:/vol0/sysbuild/ 
ip:/vol0/cde 
ip:/vol0/mnt/cm/& 
ip:/vol0/& 
ip:/vol0/mnt/fgh 
ip:/vol0/mnt/& 

正如你可以看到File2一些行的末尾有&,我需要有相應的線路更換&File1而忽視沒有&的行例如,如果第2行和第3行沒有&,腳本會跳過這兩個文件中的第2行和第3行,並轉到第4行以替換&

我該如何用shell腳本實現這一點。

回答

0

使用pasteawk

$ paste file2 file1 | awk 'sub(/&\s+/,"")' 
ip:/vol0/scratch/abc 
ip:/vol0/mnt/cm/def 
ip:/vol0/efg 
ip:/vol0/mnt/ghi 

是不是100%清楚,如果你想在&輸出沒有結束行:

$ paste file2 file1 | awk '{sub(/&\s+/,"");print $1}' 
ip:/vol0/scratch/abc 
ip:/vol0/sysbuild/ 
ip:/vol0/cde 
ip:/vol0/mnt/cm/def 
ip:/vol0/efg 
ip:/vol0/mnt/fgh 
ip:/vol0/mnt/ghi 

隨着sed

$ paste file2 file1 | sed -rn '/&/s/&\s+//p' 
ip:/vol0/scratch/abc 
ip:/vol0/mnt/cm/def 
ip:/vol0/efg 
ip:/vol0/mnt/ghi 
+0

不希望有'&'在輸出中。謝謝 –

+0

@sudo_O,有沒有使用粘貼只有sed解決方案。我想看到鋤頭使用sed的多個文件 – user2134226

0
awk 'NR==FNR{a[NR]=$0;next} sub(/&/,a[FNR])' file1 file2 
+0

File2中不包含'&'的行應該從輸出中省略。 –

+0

謝謝,腳本更新。 –

+0

@EdMorton,有沒有什麼辦法來解決這個問題sed – user2134226

0
paste file1 file2 | awk 'gsub(/&/, $1)' | cut -f2- 
0

試試這個

awk '{if (NR == FNR){f[NR]= $0;}else {gsub("&",f[FNR],$0); print $0}}' file1.txt file2.txt 
0

這可能會爲你工作(GNU SED):

sed = file1 | sed -r 'N;s/(.*)\n(.*)/\1s|\&$|\2|/' | sed -f - file2 
  1. sed = file1生成行號
  2. sed -r 'N;s/(.*)\n(.*)/\1s|\&$|\2|/'與數據相結合的行號併產生一個sed替代品ion命令使用行號作爲地址。
  3. sed -f - file2飼料上述命令爲SED調用使用-f開關和標準輸入-