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]