スポンサーリンク
awkで","区切りの列を入れ替える
※awkの使い方をまとめて一覧にしました。
参考:awk入門-使い方まとめ一覧-
参考:awk入門-使い方まとめ一覧-
awkなら列の入れ替えが簡単に書けてしまいます。
※MACターミナル(BSD系)での動作確認です。
例えば、下記のin.txtがあったとします。
$ cat in.txt 2019,4,G 2019,5,H 2019,6,I
例えば、1列目と3列目を入れ替える場合は下記のようにワンライナーで書けます。
print出力の際に、1列目と3列目を入れ替えればOKです。
in.txtは","区切りなので、-Fオプションで","を指定します。
$ cat in.txt | awk -F"," '{print $3 "," $2 "," $1}' G,4,2019 H,5,2019 I,6,2019
今度は、2列目と3列目を入れ替えてみます。
(out.txtにファイル出力しています)
$ cat in.txt | awk -F"," '{print $1 "," $3 "," $2}' >out.txt $ cat out.txt 2019,G,4 2019,H,5 2019,I,6
スポンサーリンク
awkでスペース区切りの列を入れ替える
今度はスペース区切りのファイルを処理してみます。
$ cat in.txt 2002 4 J 2002 5 K 2002 6 L
awkはデフォルトでスペース区切りのファイルを想定しています。
なので、-Fオプションの指定はなしでOKです。
$ cat in.txt | awk '{print $1 " " $3 " "$2}' 2002 J 4 2002 K 5 2002 L 6
print出力の際の区切り文字を、OFS変数で指定しても良いかと思います。
ワンライナーだと混み合うので、下記のスクリプトを書きました。
2列目と3列目を入れ替えています。
$ cat sample.awk #!/bin/sh cat in.txt | awk ' BEGIN{ OFS = " " } { print $3 ,$2 ,$1 } '
下記が実行結果になります。
$ ./sample.awk
J 4 2002
K 5 2002
L 6 2002
スポンサーリンク