1

我有以下文件1

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

您还可以通过两次调用来完成此操作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
)

输出:

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 回答