次の9桁の数字のリストを含むテキストファイルがあります。
550411876
550425175
550426504
2番目のテキストファイルには、次の行が含まれています。
09Y20171031 13415520171031 134155AP|AO|ABxxxxxxxxx|AC|CH|BIN|
xxxxxxxxx
2番目のファイルに複数回表示されますが、最初のファイルの数字に置き換えられる行を含むテキストファイルを作成する必要があります(文字通りxxxxxxxxx
ファイルにあるため、これは単なる例ではありません)。この場合、結果は次のようになります。
09Y20171031 13415520171031 134155AP|AO|AB550411876|AC|CH|BIN|
09Y20171031 13415520171031 134155AP|AO|AB550425175|AC|CH|BIN|
09Y20171031 13415520171031 134155AP|AO|AB550426504|AC|CH|BIN|
Linuxでこれを行うにはどうすればよいですか?
ベストアンサー1
数値がファイル内にあり、numbers
使用したいテンプレートファイルが次のとおりであるとしますfile
。
awk -F'|' -v OFS='|' 'NR==FNR { n[++i] = $0; next } { for (i in n) { $3 = substr($3,1,2) n[i]; print } }' numbers file
最初に数字を配列として読み込み、次にテンプレートファイルn
の場合、3番目に|
区切られたフィールドの最初の2文字を使用して配列の数字に関連付け、各数字ごとn
に結果を1回印刷します。
これらのオプションを使用すると、-区切りの方法でデータを読み書きできます-F'|' -v OFS='|'
。|
次に、出力を新しいファイルにリダイレクトします。
これは包含のためにテンプレートに依存しませんxxxxxxxxx
。
テストしてみてください:
$ cat file
09Y20171031 13415520171031 134155AP|AO|AB something something|AC|CH|BIN|
$ awk -F'|' -v OFS='|' 'NR==FNR { n[++i] = $0; next } { for (i in n) { $3 = substr($3,1,2) n[i]; print } }' numbers file
09Y20171031 13415520171031 134155AP|AO|AB550425175|AC|CH|BIN|
09Y20171031 13415520171031 134155AP|AO|AB550426504|AC|CH|BIN|
09Y20171031 13415520171031 134155AP|AO|AB550411876|AC|CH|BIN|
bash
9 -esのみを使用する方法(外部ユーティリティなし)x
:
template=$(<file)
while read number; do
printf '%s\n' "${template//xxxxxxxxx/$number}"
done <numbers