他のファイルの特定の場所のテキストを置き換える

他のファイルの特定の場所のテキストを置き換える

テキストを置き換える必要がありますファイル2.txt到着ファイル1.txt5位と8位の間。 5番目と8番目の位置の間の文字でなければなりません。上記の場所の新しい文字に置き換える必要があり、残りの場所の文字は以前と同じでなければなりません。

ファイル1.txt:

abcd9876efghijklmno
abcd9676efghijklmno
abcd9886efghijklmno
abcd9976efghijklmno

ファイル2.txt:

1234
4321
6543
5678

予想出力:

abcd1234efghijklmno
abcd4321efghijklmno
abcd6543efghijklmno
abcd5678efghijklmno

私が試したコマンド

sed '/substr($0,5,4)/r File2.txt' File1.txt >file_new.txt

ベストアンサー1

組み合わせを使用する方が簡単かもしれません。paste+cut

$ paste -d'\0' <(cut -c1-4 File1.txt) File2.txt <(cut -c9- File1.txt)
abcd1234efghijklmno
abcd4321efghijklmno
abcd6543efghijklmno
abcd5678efghijklmno


別のアプローチは、以下を使用する慣用的な2つのファイル処理です。awk

$ awk 'NR==FNR{a[FNR]=$0; next} {print substr($0,1,4) a[FNR] substr($0,9)}' File2.txt File1.txt
abcd1234efghijklmno
abcd4321efghijklmno
abcd6543efghijklmno
abcd5678efghijklmno
  • NR==FNR{a[FNR]=$0; next}行番号でキー付き配列File2.txtにすべての行を格納します。a
  • print substr($0,1,4) a[FNR] substr($0,9)必要な文字を抽出し、途中に行を挿入するためにsubstr使用されます。File2.txt

おすすめ記事