2013-08-22 109 views
-1

我有兩個排序的文本文件。文件中的數據是這樣的:Bash - 用另一個文件中的另一個字符串替換一個字符串

adam 
humanities 

antwon 
sciences 

bernard 
economics 

castiel 
sciences 

dmitri 
informatics 

zoe 
mathematics 

文件B的數據是這樣的:

adamburnston 
antwonreed 
justbernard 
castiel 
dmitrivalchenkov 
zoematthews 

我需要替換文件A(ADAM)行,在文件B線(adamburnston) 。這兩個文件按字母順序排列,幷包含相同數量的條目。我如何實現這一結果?

預期輸出:

adamburnston 
humanities 

antwonreed 
sciences 

justbernard 
economics 

castiel 
sciences 

dmitrivalchenkov 
informatics 

zoematthews 
mathematics 
+0

那你試試? – devnull

+3

你的個人資料說:'在此刻學習Python'。爲什麼不利用它? – devnull

+0

@devnull - '因爲我被明確要求在bash中做到這一點。給出一個選擇,我會嘗試在Python中。 – rahuL

回答

3

以下管道工程:

sed '2~3!d' A | paste -d $'\n' B - | sed $'3~2i\n' 

第一部分告訴GNU sed將打印第二行,然後每第三行。 paste將B與第一個sed的輸出合併,使用換行符作爲分隔符。最後一行在每行之後添加換行符。

2

這AWK應該工作:

awk 'FNR==NR{a[i++]=$0;next} NF>0{c++; if (c%2==0) print a[j++] ORS $0 ORS}' fileB fileA 
相關問題