スポンサーリンク

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オプションで","を指定します。

参考:awkの-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変数で指定しても良いかと思います。

参考:awkの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

スポンサーリンク