これは、CSVファイルの解析で頻繁に発生するユースケースです。シェルスクリプトに埋め込まれたインラインawk
スクリプトの場合、次の回避策を使用できます。
myfile="$(mktemp)"
awk '(awk script here)' > "$myfile"
head -1 "$myfile"
sed 1d "$myfile" | sort
rm "$myfile"
(または、BSDmktemp用の適切なmktempテンプレートを使用します; GNU上記のように機能します。)
ただし、Shebang #!/bin/awk -f
を使用して本格的なawkスクリプトを作成する場合、出力を並べ替えるこの1つの要素を処理するためだけに、シェルスクリプトに変更する必要はありません。
どうすればawkでこれを行うことができますか?または、awkにネイティブの並べ替え関数がない場合、awkパイプラインについてどこで学ぶことができ、パイプラインを使用してシェバンを変更せずにこれを実現するにはどうすればよいですか?
これは、最初の行を除くすべての行を並べ替える例です。
#!/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
最初の入力行は最初の出力行です。残りの行はソートされます。