[英]how to find the position of a string in a file in unix shell script
你能帮我解决这个难题吗? 我试图在文件中打印字符串(即行号)的位置,首先打印到std输出,然后在变量中捕获该值,以备后用。 字符串为“我的字符串”,文件名为“ myFile”,定义如下:
this is first line
this is second line
this is my string on the third line
this is fourth line
the end
现在,当我直接在命令提示符下使用此命令时:
% awk ‘s=index($0, “my string”) { print “line=” NR, “position= ” s}’ myFile
我得到的正是我想要的结果:
% line= 3, position= 9
我的问题是:如果定义变量VAR =“我的字符串”,为什么在执行此操作时无法得到相同的结果:
% awk ‘s=index($0, $VAR) { print “line=” NR, “position= ” s}’ myFile
只是行不通! 我什至尝试将$ VAR放在引号中,无济于事? 我尝试使用VAR(不带$符号),但不走运。 我尝试了所有我可能想到的一切……我是否缺少某些东西?
awk
变量与shell变量不同。 您需要使用-v
标志来定义它们
例如:
$ awk -v var="..." '$0~var{print NR}' file
将打印图案匹配的行号。 或针对您的索引
$ awk -v var="$Var" 'p=index($0,var){print NR,p}' file
使用所有大写字母可能不是一个好习惯,因为您可能会意外覆盖其他变量。
将输出捕获到shell变量中
$ info=$(awk ...)
对于将多行输出分配给shell数组,您可以执行
$ values=( $(awk ...) ); echo ${values[0]}
但是,如果输出包含多个字段,则会为其分配自己的数组索引。 您可以通过设置IFS
变量来更改它,例如
$ IFS=$(echo -en "\n\b"); values=( $(awk ...) )
它将捕获完整的行作为数组值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.