sedコマンドを使って単語文字列の順書を簡単に入れ替えることができます。
例えば、スペース区切りの文字列群だったり、カンマ区切りの文字列群だったり。
実際には、文字列なしの区切りもあると思うので、
以下紹介の構文では意図した動作にならない場合もあると思いますが、
sedによる文字列の入替えの参考としてください。
sedコマンドでは、 \(正規表現\) でヒットした文字列を \1 として使用することがあります。
複数の \(正規表現\) \(正規表現\) \(正規表現\) があった場合、 \1 \2 \3 が対応することになります。
実際に以下で sed コマンドを使って幾つかの動作例を記します。
$ echo "Windows Linux" | sed 's/\(.*\) \(.*\)/\2 \1/g' Linux Windows
$ STRING='debian ubuntu centos opensuse' $ echo $STRING | sed 's/\(.*\) \(.*\) \(.*\) \(.*\)/\4 \3 \2 \1/g' opensuse centos ubuntu debian
$ echo "Windows,Linux" | sed 's/\(.*\),\(.*\)/\2,\1/g' Linux,Windows
$ STRING='debian,ubuntu,centos,opensuse' $ echo $STRING | sed 's/\(.*\),\(.*\),\(.*\),\(.*\)/\4,\3,\2,\1/g' opensuse,centos,ubuntu,debian
上記の通り、 \(正規表現\) と \番号 で単語群の入替えを簡単に行うことができます。
スペース区切りで保存してあるファイルの内容を列を逆順にしてみます。
$ cat linux.txt debian ubuntu centos opensuse debian ubuntu centos opensuse
$ sed 's/\(.*\) \(.*\) \(.*\) \(.*\)/\4,\3,\2,\1/g' linux.txt opensuse,centos,ubuntu,debian opensuse,centos,ubuntu,debian
$ cat linux.txt | sed 's/\(.*\) \(.*\) \(.*\) \(.*\)/\4,\3,\2,\1/g' opensuse,centos,ubuntu,debian opensuse,centos,ubuntu,debian
一行ごとに読み込み、何らかの処理をする場合は、以下ようになると思います。
for L in `cat data.csv` do 何らかの処理 done
この場合は、IFSパラメータを設定しないと意図した動作になりません。
以下リンクの記事を参考にしてください。
以上、sedコマンドを使ってスペース区切りやCSVの列の順序を入れ替える方法の紹介でした。