TCLexpectでAWKを使用すると発生する問題

TCLexpectでAWKを使用すると発生する問題

TCK / TK unixコマンドでAWKコマンドを使用するのに問題があります。

var=`awk -v var1="^$line" -F "|" '$1~var1{print $1 }' sort-address-name-ip.txt | awk -v var2="$line$" '$0~var2'`

私は次のように使います:

set var5 [exec /usr/bin/awk -v var1={^$line} -F {|} {$1~var1{print $1 }} sort-address-name-ip.txt | /usr/bin/awk  -v var2={$line$} {$0~var2}]

私のスクリプト:

#!/usr/bin/expect
set file [ open /home/gcngov/script/practice/tcl/policy-unique_single_line-src-dst-ip.txt]
while {[gets $file line] != -1} {
        puts $line
        set file1 [open /home/gcngov/script/practice/tcl/sort-address-name-ip.txt]
        set var5 [exec /usr/bin/awk -v var1={^$line} -F {|} {$1~var1{print $1 }} sort-address-name-ip.txt | /usr/bin/awk  -v var2={$line$} {$0~var2}]
        puts $var5
}       

close $file

出力:

~/script/practice/tcl$ expect -d while-file.sh 
expect version 5.45
argv[0] = expect  argv[1] = -d  argv[2] = while-file.sh  
set argc 0
set argv0 "while-file.sh"
set argv ""
executing commands from command file while-file.sh
10.13.210.212 
missing close-bracket
    while executing
"set var5 ["
    ("while" body line 5)
    invoked from within
"while {[gets $file line] != -1} {
        puts $line
        #set var [exec /usr/bin/awk -v var1="^$line" -F "|" $1~var1{print $1 } sort-address-name-ip.txt | awk..."
    (file "while-file.sh" line 3)

ベストアンサー1

Tclでは、中括弧はシェル一重引用符と同じです。つまり、変数置換は実行されません。あなたは変わらなければなりません

var1={^$line}
# to
var1="^$line"

2番目のawkも同様です。

policy-unique_single_line-src-dst-ip.txtしかし、パイプで2つのawkを使用する理由は理解できません。パイプで区切られた列1に表示されるIPを探したいと思いますsort-address-name-ip.txt

set ips [exec cut {-d|} -f1 sort-address-name-ip.txt | grep -Fxf policy-unique_single_line-src-dst-ip.txt]

おすすめ記事