shell - 用于检查文件中是否存在特定字符串的 awk 命令,如果存在则返回该字符串存在的列名
问题描述
使用以下 awk 命令,我可以检查文件中是否存在特定字符串。
grep -R "statistics" <Filename>
但我正在寻找的输出是我需要找出这个字符串所在的列。有没有办法扩展这个命令,以便它可以返回这个字符串所在的列名。
我尝试了以下命令,但没有得到所需的输出
awk '{ for (i=1; i<=NF; ++i) { if ($i = "statistics") print i } }' <filename>
我的输入文件中有大约 1500 列。它是一个包含列标题的制表符分隔文件。
感谢任何指导。
解决方案
第一个解决方案:您能否尝试以下操作。
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
笔记:
- 第一个和第二个解决方案将给出行号、列号和标题名称。
- 第三和第四个解决方案将给出列号和标题名称。
推荐阅读
- azure-data-factory-2 - 当我的源文件没有固定的时间表来放置在 adls 上时,需要在 ADF 中管理多个管道。使用这个最可行的触发器是什么
- linux - 如何使用正则表达式从符号链接中查找文件?
- postgresql - 不调用石英作业
- bash - .bash_profile:95: 不匹配'
- javafx - 如何在javafx中将文本添加到矩形
- node.js - 如何重新抛出类验证器的验证函数返回的验证错误数组?
- spring-boot - 服务器在连接的内存存储中发送事件
- copy - 我的代码不会复制整行,但只会复制到它正在寻找的字段
- python - Amazon SP-API 速率限制
- amazon-web-services - S3 文件后处理