質問: パターンに一致する行を別のファイルの行で順番に置き換えます たとえば、次のように、あるファイルのパターンに一致する行を別のファイルの行から順番に置き換えたいと思います。file1.txt:aaaaaa bbbbbb !! 1234 !! 4567 ccccc ddddd !! 1111 !!で始まる行を置き換えるのが好きです。このファイルの行で:file2.txt:first line second line third line したがって、結果は次のようになります。aaaaaa bbbbbb first line second line ccccc ddddd third line
回答: 簡単にawkで実行できますawk ' /^!!/{ #for line stared with `!!` getline <"file2.txt" #read 1 line from outer file into $0 } 1 #alias for `print $0` ' file1.txt 他のバージョンawk ' nr == fnr{ #for lines in first file s[nr] = $0 #put line in array `s` with row number as index next #starts script from the beginning } /^!!/{ #for line stared with `!!` $0=s[++count] #replace line by corresponded array element } 1 #alias for `print $0` ' file2.txt file1.txt