Awk命令检查文件中是否存在特定字符串,如果存在则返回存在该字符串的列名

时间:2020-01-22 10:32:58

标签: shell unix awk grep

使用以下awk命令,我可以检查文件中是否存在特定字符串。

grep -R "statistics" <Filename>

但是我正在寻找的输出是我需要找出存在此字符串的列。有没有一种方法可以扩展此命令,以便它可以向我返回此字符串所在的列名称。

我尝试了以下命令,但没有得到想要的输出

awk '{ for (i=1; i<=NF; ++i) { if ($i = "statistics") print i } }' <filename>

我的输入文件中大约有1500列。这是一个制表符分隔的文件,其中包含列标题。

赞赏任何指导。

1 个答案:

答案 0 :(得分:2)

第一种解决方案: 。能否请您尝试以下操作。

awk '
FNR==1{
  for(i=1;i<=NF;i++){
    array[i]=$i
  }
}
{
  for(i=1;i<=NF;i++){
    if($i=="statistics"){
      print "Line number is: " FNR ", column number is: "i ",column heading is:" array[i]
    }
  }
}
' Input_file

第二个解决方案: :使用将具有我们要搜索的字符串值的变量。

awk -v word="statistics" '
FNR==1{
  for(i=1;i<=NF;i++){
    array[i]=$i
  }
}
{
  for(i=1;i<=NF;i++){
    if($i==word){
       print "Line number is: " FNR ", column number is: "i",column heading is:" array[i]
    }
  }
}' Input_file

以上两种解决方案都将打印行号和列号。



第三种解决方案: 要仅打印列号,请尝试以下操作:

awk 'FNR==1{for(i=1;i<=NF;i++){array[i]=$i}} {for(i=1;i<=NF;i++){if($i=="statistics"){print i,array[i]}}}' Input_file

第四解决方案: 第三解决方案的变体,具有可变方法。

awk -v word="statistics" 'FNR==1{for(i=1;i<=NF;i++){array[i]=$i}}{for(i=1;i<=NF;i++){if($i==word){print i,array[i]}}}' Input_file

注意:

  • 第一种和第二种解决方案将提供行号,列号和标题名称。
  • 第三和第四解决方案将提供列号和标题名称。
相关问题