条件付きで file1 の行を file2 の対応する行に置き換えます。

条件付きで file1 の行を file2 の対応する行に置き換えます。

たとえば、次の2つのファイルがあります。

ファイル1:

1
4
X
5
X
7

ファイル2:

2
3
5
X
X
1

Xfile1の-linesをfile2の対応する行の内容に置き換えたいと思います。

結果:

1
4
5
5
X
7

私は同じCLIコマンドを使用するソリューションを好みますsed

ベストアンサー1

file2 がメモリに収まる場合、awk を使用できます。まず、file2 を読み込み、次に file1 の処理中に「X」が表示された場合は、file2 配列でそのファイルを置き換えます。

$ awk 'NR == FNR { lines[NR]=$0; } NR != FNR { if ($0 == "X") print lines[FNR]; else print $0 }' file2 file1

再フォーマットすると、次のようになります。

$ awk 'NR == FNR { lines[NR]=$0; } 
       NR != FNR { if ($0 == "X") print lines[FNR]; 
                   else           print $0 
                 }' file2 file1

file2 は最初のファイル名、file1 は 2 番目のファイル名です。

おすすめ記事