【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選でした!
この記事が気に入ったらサポートをしてみませんか?