1

私はfile1の下にあります

22392003|28|ABC
22392004|28|ABC
22392006|28|XYZ
22392002|28|XYZ

これは別のファイルです2

MR30011596|user||IM1450029|22392099|28|AAA|28
MR30011596|user||IM1450029|22392099|28|BBB|28
MR30011596|user||IM1450029|22392006|28|CCC|28
MR30011596|user||IM1450029|22392099|28|DDD|28

file1 の $1 を場所 $5 の file2 に検索し、一致が見つかった場合は、file1 の $3 を場所 $7 の file2 に置き換えたいので、最終的な出力は次のようになります。

MR30011596|user||IM1450029|22392099|28|AAA|28
MR30011596|user||IM1450029|22392099|28|BBB|28
*MR30011596|user||IM1450029|22392006|28|XYZ|28*
MR30011596|user||IM1450029|22392099|28|DDD|28

を使用して文字を検索しようとしawk -F "|" 'FNR==NR { a[$1]; next } $5 in a'ましたが、$3 を $7 の場所にある file2 に置き換える方法がわかりませんawk script

4

2 に答える 2

3
 awk 'BEGIN{FS=OFS="|"}NR==FNR{a[$1]=$3;next}$5 in a{$7=a[$5]}1' file1 file2

上記の行は出力を提供します。(なし*)

于 2013-02-22T11:02:43.133 に答える
0

You could also accomplish this with two invocations of join:

# The input needs to be sorted on the join fields
sort             file1 > file1.sorted
sort -t'|' -k5,5 file2 > file2.sorted

(
  join -t'|' -2 5     -o '2.1 2.2 2.3 2.4 2.5 2.6 1.3 2.8' file1.sorted file2.sorted
  join -t'|' -2 5 -v2 -o '2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8' file1.sorted file2.sorted
)

Output:

MR30011596|user||IM1450029|22392006|28|XYZ|28
MR30011596|user||IM1450029|22392099|28|AAA|28
MR30011596|user||IM1450029|22392099|28|BBB|28
MR30011596|user||IM1450029|22392099|28|DDD|28
于 2013-02-22T11:56:34.973 に答える