AWK-使用多个文件查找和替换多个字段
在AWK中我很难找到我需要达到的目标。我有两个文件: 文件1 文件2 我需要将文件1中的字段10和11替换为文件2中的字段3和4,其中文件1中的字段10和11等于文件2中的字段1和2 因此,我对本例的期望输出为:AWK-使用多个文件查找和替换多个字段,awk,Awk,在AWK中我很难找到我需要达到的目标。我有两个文件: 文件1 文件2 我需要将文件1中的字段10和11替换为文件2中的字段3和4,其中文件1中的字段10和11等于文件2中的字段1和2 因此,我对本例的期望输出为: 1|2|3|4|5|6|7|8|9|AA1|BB1|12|13| 1|2|3|4|5|6|7|8|9|CC1|DD1|12|13| 1|2|3|4|5|6|7|8|9|EE1|FF1|12|13| 1|2|3|4|5|6|7|8|9|GG1|HH1|12|13| 1|2|3|4|5|6
1|2|3|4|5|6|7|8|9|AA1|BB1|12|13|
1|2|3|4|5|6|7|8|9|CC1|DD1|12|13|
1|2|3|4|5|6|7|8|9|EE1|FF1|12|13|
1|2|3|4|5|6|7|8|9|GG1|HH1|12|13|
1|2|3|4|5|6|7|8|9|II1|JJ1|12|13|
1|2|3|4|5|6|7|8|9|KK1|LL1|12|13|
1|2|3|4|5|6|7|8|9|MM1|NN1|12|13|
1|2|3|4|5|6|7|8|9|OO1|PP1|12|13|
1|2|3|4|5|6|7|8|9|QQ1|RR1|12|13|
1|2|3|4|5|6|7|8|9|SS1|TT1|12|13|
1|2|3|4|5|6|7|8|9|UUU|VVV|12|13|
1|2|3|4|5|6|7|8|9|WWW|XXX|12|13|
1|2|3|4|5|6|7|8|9|YYY|ZZZ|12|13|
1|2|3|4|5|6|7|8|9|QWE|RTY|12|13|
1|2|3|4|5|6|7|8|9|ASD|FGH|12|13|
1|2|3|4|5|6|7|8|9|ZXC|VBN|12|13|
1|2|3|4|5|6|7|8|9|ASS|BOB|12|13|
1|2|3|4|5|6|7|8|9|FFR|ERD|12|13|
非常感谢您的帮助。这样行吗
awk 'BEGIN{FS=OFS="|"}
FNR==NR {a[$1,$2]=$3; b[$1,$2]=$4; next}
($10,$11) in a {f10=a[$10,$11];$11=b[$10,$11];$10=f10}
1' f2 f1
试验
解释
将输入和输出字段分隔符设置为BEGIN{FS=OFS=“|”}
|
读取给定的第一个文件(FNR==NR{a[$1,$2]=$3;b[$1,$2]=$4;next}
)时,在数组f2
中存储第三个字段,在数组a[]
中存储第四个字段,索引由该对b[]
(
给出($1,$2)
中循环遍历给定的第二个文件(($10,$11)在a{f10=a[$10,$11];$11=b[$10,$11];$10=f10}
),检查该对f1
是否存储在数组($10,$11)
中。如果是,请进行更换。否则,线路将保持原样a[]
根据真实情况,打印当前行1
awk'BEGIN{FS=OFS=“|”}FNR==NR{a[$1fs$2]=$3fs$4;next}($10fs$11)在a{$10=a[$10fs$11];$11=”“}1f2 f1
中也可以完成,通过$1fs$2
索引存储所有内容。无论如何,这会导致额外的|
。
1|2|3|4|5|6|7|8|9|AA1|BB1|12|13|
1|2|3|4|5|6|7|8|9|CC1|DD1|12|13|
1|2|3|4|5|6|7|8|9|EE1|FF1|12|13|
1|2|3|4|5|6|7|8|9|GG1|HH1|12|13|
1|2|3|4|5|6|7|8|9|II1|JJ1|12|13|
1|2|3|4|5|6|7|8|9|KK1|LL1|12|13|
1|2|3|4|5|6|7|8|9|MM1|NN1|12|13|
1|2|3|4|5|6|7|8|9|OO1|PP1|12|13|
1|2|3|4|5|6|7|8|9|QQ1|RR1|12|13|
1|2|3|4|5|6|7|8|9|SS1|TT1|12|13|
1|2|3|4|5|6|7|8|9|UUU|VVV|12|13|
1|2|3|4|5|6|7|8|9|WWW|XXX|12|13|
1|2|3|4|5|6|7|8|9|YYY|ZZZ|12|13|
1|2|3|4|5|6|7|8|9|QWE|RTY|12|13|
1|2|3|4|5|6|7|8|9|ASD|FGH|12|13|
1|2|3|4|5|6|7|8|9|ZXC|VBN|12|13|
1|2|3|4|5|6|7|8|9|ASS|BOB|12|13|
1|2|3|4|5|6|7|8|9|FFR|ERD|12|13|
awk 'BEGIN{FS=OFS="|"}
FNR==NR {a[$1,$2]=$3; b[$1,$2]=$4; next}
($10,$11) in a {f10=a[$10,$11];$11=b[$10,$11];$10=f10}
1' f2 f1
$ awk 'BEGIN{FS=OFS="|"} FNR==NR {a[$1,$2]=$3; b[$1,$2]=$4; next} ($10,$11) in a {f10=a[$10,$11];$11=b[$10,$11];$10=f10}1' f2 f1
1|2|3|4|5|6|7|8|9|AA1|BB1|12|13|
1|2|3|4|5|6|7|8|9|CC1|DD1|12|13|
1|2|3|4|5|6|7|8|9|EE1|FF1|12|13|
1|2|3|4|5|6|7|8|9|GG1|HH1|12|13|
1|2|3|4|5|6|7|8|9|II1|JJ1|12|13|
1|2|3|4|5|6|7|8|9|KK1|LL1|12|13|
1|2|3|4|5|6|7|8|9|MM1|NN1|12|13|
1|2|3|4|5|6|7|8|9|OO1|PP1|12|13|
1|2|3|4|5|6|7|8|9|QQ1|RR1|12|13|
1|2|3|4|5|6|7|8|9|SS1|TT1|12|13|
1|2|3|4|5|6|7|8|9|UUU|VVV|12|13|
1|2|3|4|5|6|7|8|9|WWW|XXX|12|13|
1|2|3|4|5|6|7|8|9|YYY|ZZZ|12|13|
1|2|3|4|5|6|7|8|9|QWE|RTY|12|13|
1|2|3|4|5|6|7|8|9|ASD|FGH|12|13|
1|2|3|4|5|6|7|8|9|ZXC|VBN|12|13|
1|2|3|4|5|6|7|8|9|ASS|BOB|12|13|
1|2|3|4|5|6|7|8|9|FFR|ERD|12|13|