【发布时间】:2019-02-22 11:48:09
【问题描述】:
我指的是这个链接https://stackoverflow.com/a/54767231/11084572。
我有一个config file,其中2nd column is feature 和3rd column is action。我有另一个大文件,我需要将此文件的第一列与config file 的第一列匹配,并根据功能执行操作。
假设:在 File.txt 列中命名为Min (3rd col),Median (4th), Max(5th)
配置文件
Apple All Max
Car abc Median
Car xyz Min
Book cvb Median
Book pqr Max
文件.txt
Apple first 10 20 30
Apple second 20 30 40
Car abc 10 20 30
Car xyz 20 30 40
Car wxyz 10 20 30
Book cvb 60 70 80
Book pqr 80 90 100
预期输出:
Apple first 30
Apple second 40
Car abc 20
Car xyz 20
Car wxyz 10
Book cvb 70
Book pqr 100
上面的输出是在followinfg方法上生成的:
1)由于file.txt很大,所以如果config file的特征(第2列)为ALL,那么所有匹配的第1列都会根据config file的第3列执行动作。
2) 否则,如果config file 的第二列与**substring** 与file.txt 的第二列匹配,则执行
这是我尝试过的:
awk 'BEGIN {m["Min"]=3;m["Median"]=4;m["Max"]=5}
NR==FNR{ arr[$1]=$2;brr[$1]=$3;next}
($1 in arr && arr[$1]=="All") {print $1,$2,$m[brr[$1]]}
($1 in arr && $2==arr[$1] ) {print $1 ,$2,$m[brr[$1]]}
' Config.txt File.txt
代码输出:
Apple first 30
Apple second 40
Book pqr 100
Car xyz 20
上面的输出只打印匹配的第一列的一个字段(如Book cvb 70 不打印)。另外,我如何将字符串匹配为结束字符串(例如,config.txt 中定义的 xyz 与 file.txt 的 xyz and wxyz 匹配。
请帮助我解决上述挑战。谢谢!
【问题讨论】:
-
在您的
Assumption:中,您的意思可能是File.txt而不是Config.txt(?) -
@downtheroad 是的,在 File.txt 中
-
@RATNESHTIWARI,在发布示例时请注意
Car abc 200行与您的第一个 Input_file 不匹配,如果是这种情况,请更新您的示例。 -
@RavinderSingh13,谢谢,我更新了。