2016-04-19 14 views
2

Ich muss eine neue Zeile mit bestimmten Inhalt einfügen, nachdem Sie ein Muster in Text1-Datei mit Shell gefunden.Einfügen einer bestimmten Zeile nach Auftreten mit Unix

Ich habe eine Datei text_file_1.txt mit diesem Inhalt:

aaaaaa 
bbbbbb 
patternrefrefref 
cccccc 
aaaaaa 
patternasdasd 
pattern 
zzzzzz 

und text_file_2.txt mit diesem Inhalt:

111111 
333333 
555555 

und ich brauche die erste Zeile des text_file_2.txt einzufügen (das heißt, 111111), wenn Ich finde das erste Auftreten von "Muster" von text_file_1.txt und 333333, wenn ich das zweite Auftreten von "Muster (immer Muster) ...

finden

Endgültiges Ergebnis wird sein:

aaaaaa 
bbbbbb 
pattern_refrefref 
111111 
cccccc 
aaaaaa 
pattern_asdasd 
3333333 
pattern 
555555 
zzzzzz 

Ich fand, wie eine neue Zeile mit einem neuen Text nach einem Muster einzufügen, aber immer den gleichen Text einfügen, ich das nicht brauchen.

+0

Bitte bearbeiten Sie Ihre Frage richtig. – derlarsschneider

+0

Was hast du versucht und wie ist es schiefgegangen? Ich würde mich an Awk wenden (Hinweis: 'NR == FNR'), obwohl ich denke, dass es auch in' sed' möglich wäre. – tripleee

+0

Ich habe so etwas probiert: sed '/ pattern/a 111111' Datei –

Antwort

3

Diese leicht awk erfolgt über:

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 
  • Im ersten Block FNR==NR wir alle Linien von Datei2 lesen und speichern sie in ein indiziertes Array a.
  • Beim Durchlauf von Datei2, wenn wir auf pattern stoßen, drucken wir eine Zeile aus dem Array und inkrementieren den Zähler.
+1

Es ist genial! es funktioniert gut: D vielen Dank. Sie haben, dass ich eine Menge Stunden damit verschwenden, manuell an Dateien zu arbeiten^_ ^ –

2

Ich glaube, Sie suchen etwas wie dieses ...

sed '/what_you_want_to_find /a what_you_want_to_add' text_file_1.txt 

, wenn Sie auch die Änderungen in der gleichen Datei nur diese speichern möchten verwenden:

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

Ihnen helfen, ein etwas mehr, an dem Punkt, dass Sie hinzufügen, was neu Sie gedruckt werden möchten, so in what_you_want_to_add, können Sie es so machen. Speichern jede Zeile, jedes Mal in Variable außerhalb der sed, zum Beispiel möchten Sie die Zeilennummer 5.

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

erhalten und Sie können die Variable jedes Mal verwenden Sie die neue Zeile zu drucken, so würde es dies gerne in Ihrem Fall. sed '/ what_you_want_to_find/a $ line' text_file_1.txt

Verwandte Themen