最初の行を除いてawkの出力をソートしますか?

最初の行を除いてawkの出力をソートしますか?

これはCSVファイルを解析するときに引き続き遭遇するユースケースです。awkシェルスクリプトに含まれるインラインスクリプトの場合は、次の回避策を使用できます。

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ソート要素を処理するためにシェルスクリプトに変更したくありません。

awkではどうすればいいですか?または、awkにデフォルトのソート機能がない場合は、awkパイプについてどこで学ぶことができ、shebangを変更せずにこれを行うためにパイプを使用するのですか?

ベストアンサー1

以下は、最初の行を除くすべての行をソートする例です。

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

最初の入力ラインは最初の出力ラインです。残りの行はソートされます。

おすすめ記事