Shell-Script
除了第一行之外,對 awk 的輸出進行排序?
這是我在解析 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
第一輸入線是第一輸出線。其餘行已排序。