awk - 如何组合这两个命令?

时间:2012-09-09 07:56:44

标签: awk getline

我使用两个命令来扫描频道:

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

1 个答案:

答案 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,请确保在第二个循环之前使用closesync写入:

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