awk - awk 中的两个文件处理

标签 awk sed

我有文件:

结果.txt

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

假设这里第 2 列是特征,第 3 列是最小值,第 4 列是中值,第 5 列是最大值。我还有一个文件 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 中定义的相应特征的变量中,但无法显示该变量的列。请建议我如何打印相应列的列的方法。

最佳答案

$ 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}awk习惯用法将 file1 加载到以第一个字段和第二个字段作为值索引的数组中,本质上是一个字典或查找表。

关于awk - awk 中的两个文件处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54767115/

相关文章:

linux - 使用 args 从分隔文件中捕获列

regex - 用其他文件中的行替换行号

bash - 设置 svn :ignore recursively for a directory structure

regex - 除非遇到两个连续的新行,否则如何为每两行插入一个新行?

amazon-web-services - aws ssm 获取参数 rsa key 输出到文件

linux - 执行 Sed 命令

hadoop - 使用 Hive Sed 命令加载数据

bash - 按列合并文本文件 : two column common and append third column form all files

regex - 替换两个字符串之间的多次出现

ios - 使用 bash 脚本在 Info.plist 中添加/替换 URL Scheme