首页 > 解决方案 > awk 中的两个文件处理

问题描述

我有文件:

结果.txt

Apple fruits 10 20 30
Car  vehicle 40 50 60
Book study  70 80 90

假设这里第 2 列是特征,第 3 列是 Min,第 4 列是 Median,第 5 列是 Max。我有另一个文件config.txt,其中包含每个功能的属性,即

配置文件

fruits Max
vehicle Median
study Min

所以我想编写一个脚本,它只显示config.txt文件中定义的功能的列号。

预期输出:

Apple fruits 30
Car vehicle 50
Book study 70

我正在关注此链接https://stackoverflow.com/a/40206489/10220825。这是我尝试过的:

awk 'FNR==NR{arr[$2];next} $1 in arr {var =$2;print var}' result.txt config.txt

我能够将属性(如 Min、Max、Median)保存在 中定义的相应功能的变量中result.txt,但无法显示该变量的列。请向我建议一种有关如何打印相应列的列的方法。

标签: awksed

解决方案


$ awk 'BEGIN   {m["Min"]=3; m["Median"]=4; m["Max"]=5} 
       NR==FNR {a[$1]=$2; next}
               {print $1,$2,$m[a[$2]]}' config result

Apple fruits 30
Car vehicle 50
Book study 70

您需要将 min/median/max 映射到相应的列索引,并通过配置文件查找需要打印的值。

a[$2]如果要打印最大/最小/中值信息,请添加到打印中。

NR==FNR {a[$1]=$2; next}是将awkfile1 加载到以第一个字段和第二个字段作为值作为索引的数组中的惯用语,本质上是字典或查找表。


推荐阅读