[英]How do I pass the output of a command that contains quotes as an awk variable?
[英]How do I set a built in variable in awk command to global variable?
当前,我的脚本通过文件进行解析并查找特定的模式。 每个模式都彼此不同,并且在文件中互斥。 例如,如果找到“ $ identifier1”,则文件中不能存在“ $ identifier2”和“ $ identifier3”。
exist=`awk -v v1="$identifer1" -v v2="$identifier2" -v v3="$identifier3" 'BEGIN{FS=":"; OFS="-"} $2 == v1 || $2 == v2 || $2 == v3 {print}' $file`
问题是这样的:在比较期间($ 2 == v1 || $ 2 == v2 || $ 2 == v3),如何将$ 2设置为全局变量,可以在awk命令之外使用它?
任何帮助表示赞赏。
您能否再尝试一次,但您的问题尚不清楚。 如果您要检查第二个字段以外的其他字段,请更改名为field_value
的变量的值,然后awk
将查找该特定字段。
field_value="2"
exist=$(awk -v v1="$identifer1" -v v2="$identifier2" -v v3="$identifier3" -v field="$field_value" 'BEGIN{FS=":"; OFS="-"} $field == v1 || $field == v2 || $field == v3 {print}' "$file")
也许不能直接使用,但是如果您可以使用临时IO ...
您可以将$2
写入临时文件,然后再读入变量,如下所示:
exist=`awk -v v1="$identifer1" -v v2="$identifier2" -v v3="$identifier3" 'BEGIN{FS=":"; OFS="-"} $2 == v1 || $2 == v2 || $2 == v3 {print} {printf $2>"_tmpfile_for_v_"}' $file`
tmpv=$(<_tmpfile_for_v_)
rm _tmpfile_for_v_
现在,您可以使用$tmpv
存储的$2
。
顺便说一句, awk
命令可以改善一点:
awk -v v1="$identifer1" -v v2="$identifier2" -v v3="$identifier3" 'BEGIN{FS=":"; OFS="-"} {printf $2>"_tmpfile_for_v_"} $2 == v1 || $2 == v2 || $2 == v3 ' $file
如果没有给出块,则暗示{print}
。
您没有提供testdata,因此我将演示如何通过一个简化的问题来设置额外的变量。
假设您的文件只有一行以1开头(类似于1 2 3
)。
如何使用awk
填充两个变量,一个以1开头的行,另一个以第二个字段填充的行?
你可以找到线
line=$(awk '/^1/ {print}' file)
现在你想做些类似的事情
awk '/1^/ {print "line=" $0; print "field2=" $2}' file
当您知道该行没有#
,可以使用
IFS='#" read -r line field2 <<< $(awk '/^1/ {print $0 "#" $2}' file
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.