GNU/Linux >> Linux の 問題 >  >> Linux

パターンに一致する行を別のファイルの行に順番に置き換えますか?

たとえば、次のように、あるファイルのパターンに一致する行を別のファイルの行から順番に置き換えたいと思います。

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

Linux
  1. スクリプトを実行するために、パターンに一致するファイルがあるかどうかをテストしますか?

  2. 大きなファイルにSedとParallelを使用して、行を別のコンテンツに置き換えますか?

  3. 行の範囲を行の範囲(sedまたはその他)に置き換えますか?

  1. ファイルに複数の行を追加するにはどうすればよいですか?

  2. ファイル B に表示される行を別のファイル A から削除するには?

  3. DIFF 内の 1 つのファイルからの行の一覧表示

  1. テキストファイルから最初の数行を効率的に削除しますか?

  2. Linuxでjar内のファイルをコマンドラインに置き換える方法は?

  3. Linux - 特定の行からファイルの最後までの grep