ヘッダーを維持しながら、タブ区切りのファイルを特定のフィールドでソートしたいと思います。awk
ここで説明されているように使用しています。awkのソートとユニークsort
しかし、フィールド区切り文字がタブであると誰に話すべきかわかりません。
おもちゃデータ:
$ echo -e "head_1\thead_2\thead_3" > file.tsv
$ echo -e "aaa zzz\tc\t300" >> file.tsv
$ echo -e "bbb yyy ooo\ta\t100" >> file.tsv
$ echo -e "ccc xxx nnn\tb\t200" >> file.tsv
$ column -ts $'\t' file.tsv
head_1 head_2 head_3
aaa zzz c 300
bbb yyy ooo a 100
ccc xxx nnn b 200
$ awk -F'\t' 'NR==1; NR>1 { print | "sort -k2" }' file.tsv | column -ts $'\t'
head_1 head_2 head_3
ccc xxx nnn b 200 ## note these data are sorted
bbb yyy ooo a 100 ## based on the xxx/yyy/zzz
aaa zzz c 300 ## not the a/b/c
sort
フィールド区切り文字をタブで明示的に指定しようとすると、次のエラーが発生します。これは引用問題に関連しているようです。
$ awk -F'\t' 'NR==1; NR>1 { print | "sort -k2 -t $'\t'" }' file.tsv | column -ts $'\t'
sort: option requires an argument -- 't'
Try 'sort --help' for more information.
head_1 head_2 head_3
sort
` awk?内部に列区切り文字を指定するには?ありがとう
SEのWebインターフェイスは、構文の強調表示でNotepad ++よりも優れた作業を行います。以下は私が試したいくつかのことです。
$ awk -F'\t' 'NR==1; NR>1 { print | "sort -k2 -t $'$'\t''" }' file.tsv | column -ts $'\t'
head_1 head_2 head_3
aaa zzz c 300
bbb yyy ooo a 100
ccc xxx nnn b 200
$ awk -F'\t' 'NR==1; NR>1 { print | "sort -k2 -t $'\t'" }' file.tsv | column -ts $'\t'
sort: option requires an argument -- 't'
Try 'sort --help' for more information.
head_1 head_2 head_3
$ awk -F'\t' 'NR==1; NR>1 { print | "sort -k2 -t "'$'\t''"" }' file.tsv | column -ts $'\t'
sort: option requires an argument -- 't'
Try 'sort --help' for more information.
head_1 head_2 head_3
$ awk -F'\t' 'NR==1; NR>1 { print | "sort -k2 -t "'$'\t'' }' file.tsv | column -ts $'\t'
sort: option requires an argument -- 't'
Try 'sort --help' for more information.
head_1 head_2 head_3
ベストアンサー1
次のいずれかのオプションを選択します。
... | "sort -k2 -t \\\t "
... | "sort -k2 -t \"\t\" "
... | "sort -k2 -t'\''\t'\'' "
... | "sort -k2 -t \047\011\047" ## preferred
\011
オクテットはASCIIコードです商標文字/\047
一重引用符 '
awk -v q="'" ... { print | "sort -k2 -t " q "\t" q }'
awk -v tb="'\t'" ... { print | "sort -k2 -t " tb }'
awk -v tb=$'\t' ... { print | "sort -k2 -t \"" tb "\"" }'
awk -v tb=$'\t' -v q="'" ... { print | "sort -k2 -t " q tb q }'
より多くの内容があります…awkのシェル参照の問題;awkのエスケープシーケンス