我的输入文件(文件1)匹配的输入文件中的第一个值和第二列是这样的:AWK检索特定的模式后的文本,其中第一和第二列
part position col3 col4 info
part1 34 1 1 NAME=Mark;AGE=23;HEIGHT=189
part2 55 1 1 NAME=Alice;AGE=43;HEIGHT=167
part2 19 1 1 NAME=Emily;AGE=16;HEIGHT=164
part3 23 1 1 NAME=Owen;AGE=55;HEIGHT=181
part3 99 1 1 NAME=Rachel;AGE=76;HEIGHT=162
我需要找回info列中的“NAME =”后面的文本,但仅当前两列中的值与另一个文件(file2)匹配时。
part position
part2 55
part3 23
那么只有第2,4行会被认为和之后的文本“NAME =”这些行被放入输出文件:
Alice
Owen
我不需要保留订单原始行的,所以下面的输出是同样有效:
Owen
Alice
我的(不太好)的尝试:
awk -F, 'FNR==NR {a[$1]=$5; next}; $1 in a {print a[$1]}' file1 file2
@JamesBrown打印名称这些文件是否按照awk的顺序排列。在上面的例子中,file1是文件'NAME'等 – nu11p01n73R
优秀的答案。然而,我意识到我的文件是制表符分隔而不是空格分隔......我尝试用tab替换命令中的空格: awk -F“[\ t =;]”'FNR == NR {found [$ 1'\吨'$ 2] = $ 6;下一个} $ 1'\ t'$ 2找到{print found [$ 1'\ t'$ 2]}'file1 file2 但是没有输出... – HollowBastion
@HollowBastion尝试字段分隔符为'-F“[[:space :] =] *“'。还要确保文件的顺序,它们非常重要 – nu11p01n73R