0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

複数ファイルをsortしたときに元のファイル名もつけておきたい

Posted at

複数のファイルをまとめてsortしたい

下記のように、地域別の複数のtsvファイルがあり、その中には年月に対する何らかの件数が入っていたとします。

% ls
中国.tsv	中部.tsv	九州.tsv	四国.tsv	東京.tsv	東北.tsv	近畿.tsv	関東.tsv	北海道.tsv

% head *
==> 中国.tsv <==
2019/12	26
2019/11	26
2019/10	30
2019/9	20
2019/8	28
2019/7	12
2019/6	16
2019/5	6
2019/4	22
2019/3	22

==> 中部.tsv <==
2019/12	43
2019/11	37
2019/10	42
2019/9	39
2019/8	36
2019/7	32
2019/6	24
2019/5	36
2019/4	35
2019/3	29

...

この複数のファイルに対して、件数が小さいもの10個を表示したいと思います。

sortコマンドだと元のファイル名がわからない

普通にsortコマンドを複数ファイルに対して実行すると、結果を見ても元のファイル名がわかりません。

% sort -k 2 -n * | head
2019/2	4
2019/1	5
2019/5	5
2019/5	6
2019/7	7
2019/6	8
2019/2	9
2019/3	9
2019/3	9
2019/3	10

grep & sort で解決

こういう時は、grepコマンドを通してからsortしましょう。そうするとファイル名を各行の先頭につけることができます。

% grep . * | sort -k 2 -n | head
北海道.tsv:2019/2	4
東京.tsv:2019/5	5
北海道.tsv:2019/1	5
中国.tsv:2019/5	6
東京.tsv:2019/7	7
東京.tsv:2019/6	8
東京.tsv:2019/2	9
四国.tsv:2019/3	9
東京.tsv:2019/3	9
四国.tsv:2019/5	10

何でgrepをつけるといいのか

何でこうできるかというと、grepを通すとその結果にファイル名がつくからですね。
今回はgrepで行を絞りたくはないので、全ての行にヒットするように grep . にしています。

% grep . *
中国.tsv:2019/12	26
中国.tsv:2019/11	26
中国.tsv:2019/10	30
中国.tsv:2019/9	20
中国.tsv:2019/8	28
中国.tsv:2019/7	12
中国.tsv:2019/6	16
中国.tsv:2019/5	6
中国.tsv:2019/4	22
中国.tsv:2019/3	22
中国.tsv:2019/2	20
中国.tsv:2019/1	23
中部.tsv:2019/12	43
中部.tsv:2019/11	37
中部.tsv:2019/10	42
中部.tsv:2019/9	39
中部.tsv:2019/8	36
中部.tsv:2019/7	32
中部.tsv:2019/6	24
中部.tsv:2019/5	36
中部.tsv:2019/4	35
中部.tsv:2019/3	29
中部.tsv:2019/2	27
中部.tsv:2019/1	31
...

実は grep . は空白行を無視してしまいますが、今回のような設定の場合は問題ないですよね。
あ、あと、 grep -H を暗黙的に使っています。

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?