如何使用awk查找文本文件中指定单词的位置?
问题原因
你的脚本无输出是因为awk脚本里的shell变量引用方式错误:原脚本中if($i == '$word')用单引号包裹了$word,shell在解析时不会替换单引号内的变量,导致awk实际是在比较每个字段是否等于字符串$word,而非你输入的目标单词(比如"Tarun"),所以匹配不到结果。
修正方案
这里提供两种可靠的修正方式:
方式一:用awk的-v选项传递变量(推荐)
这种方式能安全处理包含空格或特殊字符的单词,是最佳实践:
read -p "Write a word: " word awk -v target="$word" '{ for(i=1;i<=NF;i++) if($i == target) print "Row: " NR, "Column: " i }' file.txt
方式二:用双引号包裹awk脚本并转义内部变量
如果坚持用shell变量拼接的方式,需要用双引号包裹整个awk脚本,同时转义awk自身的变量(比如$i要写成\$i),避免被shell解析:
read -p "Write a word: " word awk "{ for(i=1;i<=NF;i++) if(\$i == \"$word\") print \"Row: \" NR, \"Column: \" i }" file.txt
验证效果
当你输入"Tarun"后,两种方式都会输出:
Row: 2 Column: 1
内容的提问来源于stack exchange,提问作者MHmmm
相关产品推荐
相关产品推荐

