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"
두 번째 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]