使用以下awk命令,我可以检查文件中是否存在特定字符串。
grep -R "statistics" <Filename>
但是我正在寻找的输出是我需要找出存在此字符串的列。有没有一种方法可以扩展此命令,以便它可以向我返回此字符串所在的列名称。
我尝试了以下命令,但没有得到想要的输出
awk '{ for (i=1; i<=NF; ++i) { if ($i = "statistics") print i } }' <filename>
我的输入文件中大约有1500列。这是一个制表符分隔的文件,其中包含列标题。
赞赏任何指导。
答案 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
注意: