見出し画像

【Tips】[Linux]地味に便利なコマンド3選(tac,seq,look)

■ コマンドラインで済ませよう

 過去に何度か、Linuxのコマンドラインは素晴らしい旨の記事を書きました。(ちょっと趣向が違うものが1つ紛れていますが…)

 GUIも良いですが、つくりがシンプルでコマンド1つで解決する喜びを知ってしまうとなかなか抜けられないですね、Linux。Fortranはおろか、pythonですらも書くのが面倒くさく、シェル芸人への道をひたすら進むことになりそうです。

今日はそんなコマンド達から、あまり表には出ないけれどいぶし銀な活躍をしてくれる3つを紹介します。

■ tac

 まずはtacです。これを考えた人は相当スマートですね。ネーミングも含めて抜群のセンスです。

 これに似たコマンドがありますよね。そう、catです。catは結構有名なのでご存知の方も多いと思います。ファイルの中身を標準出力へ返すコマンドですね。

$ cat fukuoka.csv
年月日,降水量の合計(mm),降水量の合計(mm),平均気温(℃),最高気温(℃),最低気温(℃)
2015/1/1,1.5,0,2.8,5.9,-0.5
2015/1/2,3,0,4.4,6.5,0.9
2015/1/3,0,1,4.4,8.7,-0.9
2015/1/4,0,0,8.6,14,5.2
 :
2019/11/29,0,0,10.4,15.4,7.1
2019/11/30,0,1,11.2,16.8,6.4
2019/12/1,31.5,0,14.6,19.6,10.5

そして今回のtac、これはズバリ、catの逆です。ファイルの最終行から1行目を順番に標準出力してくれるという機能です。いやぁありがたい。たまーにありますよね。昇順と降順を変更したいとき。そんな時はtacで一発です。

$ tac fukuoka.csv
2019/12/1,31.5,0,14.6,19.6,10.5
2019/11/30,0,1,11.2,16.8,6.4
2019/11/29,0,0,10.4,15.4,7.1
  :
2015/1/4,0,0,8.6,14,5.2
2015/1/3,0,1,4.4,8.7,-0.9
2015/1/2,3,0,4.4,6.5,0.9
2015/1/1,1.5,0,2.8,5.9,-0.5
年月日,降水量の合計(mm),降水量の合計(mm),平均気温(℃),最高気温(℃),最低気温(℃)

■ seq

 つづいてはseqです。seqはおそらく「sequence」の略で、「連続の」というような意味でしょう。数字の連番を出してくれます。こいつが結構使い勝手がいい。seq [ 数字 ]で1からその数字までの連番を出してくれます。

$ seq 10
1
2
3
4
5
6
7
8
9
10

さて、seqの本領はここからです。結構Linuxって1と10が面倒くさいんですね。なぜかというとsortが効かないから。普通にsortしようとすると、

$ seq 10 | sort
1
10
2
3
4
5
6
7
8
9

「おい10よ。言わんとしていることは分からんでもないが、お前の位置はそこじゃない。もっと下だ。」と言いたくなる感じになってしまいます。

あとはファイルの連番を振る時もちょっとヤキモキしますね。

$for num in `seq 10`
> do
>    echo file_${num}.txt
> done
file_1.txt
file_2.txt
file_3.txt
file_4.txt
file_5.txt
file_6.txt
file_7.txt
file_8.txt
file_9.txt
file_10.txt

「お、おう、、確かにできたが、、なんかもうちょっと・・こう・・さ・・ね?美意識というか、、美的センスというか、、ね?」という感じでヤキモキします。

そんな時に活躍するのが、seq -wです。もうこいつがあれば万事解決。行きますよ。

$seq -w 10
01
02
03
04
05
06
07
08
09
10
$ for num in `seq -w 10`; do echo file_${num}.txt; done
file_01.txt
file_02.txt
file_03.txt
file_04.txt
file_05.txt
file_06.txt
file_07.txt
file_08.txt
file_09.txt
file_10.txt

ああああああーーーこれだよこれ!!これぞ美意識!!

という事で、wオプションを使うと0埋めして桁数を揃えてくれるんですね。もう感激。

もうseq様様な感じになってきましたが、このseq君はdateコマンドとの出会いにより更なる高みへと登り詰めています。

もう細かい説明はしません。何も考えずに以下のコマンドをコピペしてみてください。知らない人はおそらく感激します。

seq 0 365 | xargs -n1 -i date -d2020/01/01+{}days +%Y%m%d

はい、皆さんご一緒に。

ああああああああああーーーーー!!!

この感激はきっと伝わる人には伝わると思います。まじかよbash。日付に弱いと思って舐めていたよ。ごめんよ。

もうこれができれば煮るなり焼くなりheadするなりtailするなりtacするなり、あとは好きにしてください。月末?うるう年?そんなの怖くありません。

■ look

いやぁ、seq素晴らしいですね。感動的ですね。tac, seqと来たらもう、lookしかないでしょう!!ここでpasteとか紹介してもノれないでしょう!!

という事で最後はlookです。こいつは超マイナーコマンドだと思います。私自身も使う機会が限られ過ぎていてほとんど使いません(笑)

ただ条件が揃えばエグい威力を発揮してくれます。ではその条件と威力とは何か。端的に言えば、

検索キーが1列目にあって
なおかつソートされている条件で発動する
爆速のgrep

です。なんかカッコいいですよね。善逸みたいなキャラですね。

何やらlookがもつ辞書の検索機能を活用するらしいです。コマンドを少し打った時のtabで候補が出てくるやつですね。あの機能の速さを利用すれば、上記の条件がそろった時にgrepを大きく上回る爆速っぷりを発揮するようです。

使う機会はそれほどなく、1列目に持ってきたりソートしたりするのが面倒くさいですが、この条件が揃えばもう、それはそれは霹靂一閃のような速さでgrepしてくれます。詳しくは以下のブログをご覧ください。

以上!地味に便利なLinuxコマンド3選でした!

この記事が気に入ったらサポートをしてみませんか?