ご存知tacコマンドは、catコマンドの逆をしてくれるコマンドです。
~$ seq 10 | tac 10 9 8 7 6 5 4 3 2 1
テキストの上下を逆にするだけですので、tacを2回連続して使うと、元に戻ります。
~$ seq 10 | tac 1 2 3 4 5 6 7 8 9 10
セパレータを改行から,(カンマ)に変えてみましょう。
seqコマンドは、-sでセパレータを指定できますので,(カンマ)を指定します。
~$ seq -s, 10 1,2,3,4,5,6,7,8,9,10
,(カンマ)区切りで、数列が並びました。
これをtacを使うには、tacでセパレータ指定をしなければなりません。
tac -sで,(カンマ)を指定します。
~$ seq -s, 10 | tac -s, 10 9,8,7,6,5,4,3,2,1,
結果ですが、少し変です。10の後が改行になっています。また、1の後が,(カンマ)になっています。
tac -s,を続けて使ってみます。
~$ seq -s, 10 | tac -s, | tac -s, 1,2,3,4,5,6,7,8,10 9,
元のテキストには戻りませんでした。
これは、tacのセパレータが、要素の直後に同数存在していないとならないからです。
カンマの数を合わせてみましょう。
~$ seq 10 | tr \\n , 1,2,3,4,5,6,7,8,9,10, ~$
上記のようにseq -s,の代わりに、trで改行を,(カンマ)にします。
これをtac -s,してみると、
~$ seq 10 | tr \\n , | tac -s, 10,9,8,7,6,5,4,3,2,1,
きれいに逆順になりました。
では2回使ってみましょう。
~$ seq 10 | tr \\n , | tac -s, | tac -s, 1,2,3,4,5,6,7,8,9,10,
テキストは元通りになりました。
コメント