除第一行外,对 awk 的输出进行排序?

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?

Joh*_*024 7

这是一个对除第一行以外的所有行进行排序的示例:

#!/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)

第一条输入线是第一条输出线。其余行已排序。