我的输入文件(file1)如下所示:
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
我需要在" NAME ="之后检索文字。在info列中,但前提是前两列中的值与另一个文件(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
答案 0 :(得分:2)
类似的东西,
Initialize()
示例强>
awk -F"[ =;]" 'FNR==NR{found[$1" "$2]=$6; next} $1" "$2 in found{print found[$1" "$2]}'
它的作用是什么?
$ awk -F"[ =;]" 'FNR==NR{found[$1" "$2]=$6; next} $1" "$2 in found{print found[$1" "$2]}' file1 file2
Alice
Owen
-F"[ =;]"
设置字段分隔符。我们将其设置为空格或-F
或=
。这样可以更轻松地从第一个文件中获取名称,而无需使用;
函数。
split
此块仅针对file1运行,此处我们将名称found[$1" "$2]=$6
保存在由$6
found
中/ LI>
part position
这是针对第二个文件执行的。检查是否在数组中找到$1" "$2 in found{print found[$1" "$2]}
,如果是,则从数组中打印名称