当前,我的脚本解析文件并查找特定的模式。每个模式都彼此不同,并且在文件中互斥。例如如果找到“ $ 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命令之外使用它?
感谢您的帮助。
答案 0 :(得分:0)
能否请您尝试一次,但您的问题尚不清楚。如果您要检查第二个字段以外的其他字段,请更改名为Component 1: state7, state8, state9 (from fetch 3)
Component 2: state7, state8, state9 (from fetch 3)
Component 3: state7, state8, state9 (from fetch 3)
的变量的值,然后field_value
将查找该特定字段。
awk
答案 1 :(得分:0)
也许不能直接,但是如果您可以使用临时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
的{{1}}。
$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
。
答案 2 :(得分:0)
您没有提供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