(Linux)tacコマンド-sオプション

ご存知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,

テキストは元通りになりました。

コメント

タイトルとURLをコピーしました