2016-04-19 36 views
2

我需要在帶shell的text1文件中找到一個模式後,插入一個特定內容的新行。在發生Unix後插入一個特定的行

我有一個文件text_file_1.txt與此內容:

aaaaaa 
bbbbbb 
patternrefrefref 
cccccc 
aaaaaa 
patternasdasd 
pattern 
zzzzzz 

以及與此內容的text_file_2.txt

111111 
333333 
555555 

,我需要插入的text_file_2.txt第一行(即111111)時我發現第一次出現「模式」text_file_1.txt333333當我發現第二次出現「模式(總是模式)...

最終結果將是:

aaaaaa 
bbbbbb 
pattern_refrefref 
111111 
cccccc 
aaaaaa 
pattern_asdasd 
3333333 
pattern 
555555 
zzzzzz 

我發現如何插入一個新的文本換行模式後,但始終插入相同的文字,我不需要這個。

+0

請正確處理格式問題。 – derlarsschneider

+0

你有什麼試過的,它是如何失敗的?我會轉向Awk(提示:'NR == FNR'),儘管我猜也可能在'sed'中做。 – tripleee

+0

我試過這樣的: sed'/ pattern/a 111111'文件 –

回答

3

這是用awk很容易做到:

awk 'FNR==NR{a[FNR]=$0; next} 1; /pattern/{print a[++i]}' text_file_2.txt text_file_1.txt 

aaaaaa 
bbbbbb 
patternrefrefref 
111111 
cccccc 
aaaaaa 
patternasdasd 
333333 
pattern 
555555 
zzzzzz 
  • 在第一個塊FNR==NR我們從文件2讀取所有行,並將它們存儲在索引數組a
  • 每當我們遇到pattern時,通過file2迭代,我們從數組中打印一行並遞增計數器。
+1

這太棒了!它工作得很好:D非常感謝你。你已經得到了我手動處理文件浪費了大量的時間^ _ ^ –

2

我認爲你正在尋找這樣的事情...

sed '/what_you_want_to_find /a what_you_want_to_add' text_file_1.txt 

,如果你也想保存在同一文件中的變化只是用這樣的:

sed -i '/what_you_want_to_find /a what_you_want_to_add' text_file_1.txt 

幫你再加上你想要打印的新東西,所以在what_you_want_to_add中,你可以這樣做。 保存每一行的sed的變量外,每一次, 例如你想獲得行號5.

line= awk 'NR==5' text_file_2.txt 

,你可以使用變量每次打印新的生產線,所以會喜歡這個在你的情況。 sed的 '/ what_you_want_to_find/A $線' text_file_1.txt

相關問題