我正在尝试搜索文件并根据列中是否存在特定值返回特定列。例如,如果我在文件中搜索“红色”:
One Two Three
Cat Dog Chicken
Blue Black Red
Blah Blah Blah
我要退货:
Three
Chicken
Red
Blah
我什至会接受只知道哪个列 grep 或任何其他搜索命令找到了匹配项,所以我可以使用 cut,但我什至找不到那么多。
这是一种方式:
将所有数据存储在矩阵中a[line][column]
。将列号保存在p
. 最后打印所有项目a[line][p]
。
$ awk -v text=Blue '{for (i=1; i<=NF; i++) {a[NR,i]=$i; if ($i~text) {p=i}}} END{ for (i=1; i<=NR; i++) print a[i,p]}' a
One
Cat
Blue
Blah
$ awk -v text=Red '{for (i=1; i<=NF; i++) {a[NR,i]=$i; if ($i~text) {p=i}}} END{ for (i=1; i<=NR; i++) print a[i,p]}' a
Three
Chicken
Red
Blah
要获得完全匹配,请替换~
为==
(感谢 konsolebox):
awk -v text=Blue '{for (i=1; i<=NF; i++) {a[NR,i]=$i; if ($i==text) {p=i}}} END{ for (i=1; i<=NR; i++) print a[i,p]}' a
^^
一种可能性,取决于您如何回答我在评论中发布的问题:
awk -v tgt="Red" '
NR==FNR {for (i=1;i<=NF;i++) if ($i==tgt) cols[i]; next}
{sep=""; for (i=1;i<=NF;i++) if (i in cols) {printf "%s%s", sep, $i; sep=OFS}; print ""}
' file file