0

我正在尝试搜索文件并根据列中是否存在特定值返回特定列。例如,如果我在文件中搜索“红色”:

One    Two    Three
Cat    Dog    Chicken
Blue   Black  Red
Blah   Blah   Blah

我要退货:

Three
Chicken
Red
Blah

我什至会接受只知道哪个列 grep 或任何其他搜索命令找到了匹配项,所以我可以使用 cut,但我什至找不到那么多。

4

2 回答 2

3

这是一种方式:

将所有数据存储在矩阵中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
                                                            ^^
于 2013-09-09T22:16:34.023 回答
0

一种可能性,取决于您如何回答我在评论中发布的问题:

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
于 2013-09-10T00:30:31.430 回答