Shell-Script

除了第一行之外,對 awk 的輸出進行排序?

  • November 2, 2016

這是我在解析 CSV 文件時經常遇到的一個案例。當它是awk嵌入在 shell 腳本中的內聯腳本時,我可以使用以下解決方法:

myfile="$(mktemp)"
awk '(awk script here)' > "$myfile"
head -1 "$myfile"
sed 1d "$myfile" | sort
rm "$myfile"

(或者為 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)}

例子

考慮這個文件:

$ cat file
Letter  Value
A       12
D       10
C       15
B       13

然後:

$ awk -f script.awk file
Letter  Value
A 12
B 13
C 15
D 10

第一輸入線是第一輸出線。其餘行已排序。

引用自:https://unix.stackexchange.com/questions/243491