我使用两个命令来扫描频道:
awk 'BEGIN{while(" w_scan -c PL -x " | getline ) print >> "tmp" }'
awk 'BEGIN{while(" w_scan -I tmp -E 0 -t 3 -F " | getline) print >> "channels" }'
我想做同样的事,但是只用一个命令。如何简化以跳过写入tmp?
感谢您的帮助。
修改
我尝试了这个命令,但它不起作用:
awk 'BEGIN { while (" w_scan -c PL -x " | getline ){split($0, tab, RS) system( " w_scan -I \047" tab[1] "\047 -E 0 -t 3 -F " ">>" "channels" )}}'
结果错误 - > enter link description here
EDIT-1
当我使用此脚本时不起作用。
run.awk
BEGIN {
while (" w_scan -c PL -x " | getline ) {
split($0, tab, RS)
system( " w_scan -I '\047'" tab[1] "'\047' -E 0 -t 3 -F >> channels" )
}
}
结果错误→enter link description here
当我使用这个脚本时,效果很好。
sh script
#!bin/bash
awk 'BEGIN{while(" w_scan -c PL -x " | getline ) print >> "tmp" }'
awk 'BEGIN{while(" w_scan -I tmp -E 0 -t 3 -F " | getline) print >> "channels" }'
结果 - > enter link description here
答案 0 :(得分:2)
只需将它们粘在BEGIN
区块中:
awk '
BEGIN {
while(" w_scan -c PL -x " | getline ) print >> "tmp"
while(" w_scan -I tmp -E 0 -t 3 -F " | getline) print >> "channels"
}
'
如果你想把整个事情放在一行上,你可以用分号分隔命令:
awk 'BEGIN { while(" w_scan -c PL -x " | getline ) print >> "tmp"; while(" w_scan -I tmp -E 0 -t 3 -F " | getline) print >> "channels" }'
您正在两个循环中访问tmp
,请确保在第二个循环之前使用close
和sync
写入:
run.awk
BEGIN {
while(" w_scan -c PL -x " | getline )
print >> "tmp"
close("tmp")
system("sync")
while(" w_scan -I tmp -E 0 -t 3 -F " | getline)
print >> "channels"
}
执行:
awk -f run.awk