0

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

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" )}}'

结果错误 ->在此处输入链接描述

编辑-1

当我使用此脚本时不起作用。

运行.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" )
  }
}

结果错误 →在此处输入链接描述

当我使用这个脚本时,它运行良好。

sh脚本

#!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" }'

结果 --> 在此处输入链接描述

4

1 回答 1

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两个循环中访问,请确保在第二个循环之前使用closeand编写它sync

运行.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
于 2012-09-09T10:36:14.740 回答