如何将变量从awk传递给shell命令?

Vah*_*ili 46 shell awk parameter-passing

我试图在awk中为文件的每一行运行一个shell命令,而shell命令需要一个输入参数.我试图使用system(),但它没有识别输入参数.

该文件的每一行都是一个文件的地址,我想运行一个命令来处理该文件.因此,对于一个简单的例子,我想对每一行使用'wc'命令并传递$1给wc.

awk '{system("wc $1")}' myfile
Run Code Online (Sandbox Code Playgroud)

Ken*_*ent 60

你很亲密 你必须连接命令行与awk变量:

awk '{system("wc "$1)}' myfile
Run Code Online (Sandbox Code Playgroud)

  • 它对于system()部分也是不正确的 - 它应该是`system("wc""$ 1"\"")`. (7认同)
  • 这是这个工作的错误语法,它是system()的一个错误的应用程序,打印不能做你认为它会做的事情,并且你不能将system()调用的输出分配给awk变量,什么您在评论中发布的内容将system()的返回码分配给变量.时间喝点咖啡@Kent! (5认同)
  • @EdMorton是的!系统返回状态代码.....我被vimscripts'`system()`... :(.cmd | getline var应该读取输出......这个答案/评论不正确可变部分. (3认同)

gle*_*man 41

你无法获取awk system()调用的输出,你只能获得退出状态.使用getline/pipegetline/variable/pipe结构

awk '{
    cmd = "your_command " $1
    while (cmd | getline line) {
        do_something_with(line) 
    }
    close(cmd)
}' file
Run Code Online (Sandbox Code Playgroud)

  • 获取shell命令输出的正确方法是+1,但通常创建变量的语法是`cmd ="your_command \""$ 1""\"`所以当cmd执行时引用参数并且你需要测试getline的结果是否大于零,否则如果失败则会陷入无限循环. (3认同)