AWK在特定模式之后检索文本,其中第1列和第2列与输入文件中第1列和第2列中的值匹配

时间:2016-08-15 03:55:49

标签: awk

我的输入文件(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

1 个答案:

答案 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]},如果是,则从数组中打印名称