Wil*_*ard 5 scripting pipe awk shell-script sort
这是我在解析 CSV 文件时不断遇到的一个用例。当它是awk
嵌入在 shell 脚本中的内联脚本时,我可以使用以下解决方法:
myfile="$(mktemp)"
awk '(awk script here)' > "$myfile"
head -1 "$myfile"
sed 1d "$myfile" | sort
rm "$myfile"
Run Code Online (Sandbox Code Playgroud)
(或者为 BSD mktemp 使用适当的 mktemp 模板;GNU 的工作方式如上。)
但是,在使用 shebang 编写完整的 awk 脚本时#!/bin/awk -f
,我不想将其更改为 shell 脚本只是为了处理排序输出的这一因素。
我怎样才能在 awk 中做到这一点?或者,如果 awk 中没有本机排序功能,我可以在哪里了解 awk 管道以及如何使用管道来完成此操作而不更改 shebang?
这是一个对除第一行以外的所有行进行排序的示例:
#!/bin/awk -f
BEGIN{cmd="sort"}
NR==1{print;next}
{print $1,$2 | cmd}
END{close(cmd)}
Run Code Online (Sandbox Code Playgroud)
考虑这个文件:
$ cat file
Letter Value
A 12
D 10
C 15
B 13
Run Code Online (Sandbox Code Playgroud)
然后:
$ awk -f script.awk file
Letter Value
A 12
B 13
C 15
D 10
Run Code Online (Sandbox Code Playgroud)
第一条输入线是第一条输出线。其余行已排序。