Linux・UNIXでExcelのフィルタのように、ファイルから〇〇以上、〇〇以下で行を抽出する方法
Pocket

LinuxやUNIXで、Excelのフィルタ機能のように特定の列で〇〇以上、〇〇以下といった指定方法で行を抽出する場合は、awkを使うとカンタンだ。
awkで特定列の値が〇〇以上の行を指定する場合は、以下のように指定する。

awk '列 >= 条件' 対象ファイル

 

複数条件を指定する場合は、以下のように「&&」で繋げる(orの場合は、「||」で繋げる)。
例えば、特定列の値が〇〇以上、〇〇以下といった指定をする場合は、以下のようにする。

awk '列 >= 条件 && 列 <= 条件' 対象ファイル

20150925_000000

[root@test-centos7 ~]# cat /work/test5_7.txt
1 aaaaa 10
2 bbbbb 4
3 ccccc 7
4 ddddd 3
5 eeeee 9
6 fffff 6
7 ggggg 8
8 hhhhh 2
9 iiiii 1
10 jjjjj 5
[root@test-centos7 ~]# awk '$1 >=3' /work/test5_7.txt
3 ccccc 7
4 ddddd 3
5 eeeee 9
6 fffff 6
7 ggggg 8
8 hhhhh 2
9 iiiii 1
10 jjjjj 5
[root@test-centos7 ~]# awk '$1 >=3 && $1 <=7' /work/test5_7.txt
3 ccccc 7
4 ddddd 3
5 eeeee 9
6 fffff 6
7 ggggg 8
Sponsored Links

もちろん、特定列の値を指定することも出来る。

awk '列 == 条件' 対象ファイル

20150925_000001

[root@test-centos7 ~]# cat /work/test5_7.txt
1 aaaaa 10
2 bbbbb 4
3 ccccc 7
4 ddddd 3
5 eeeee 9
6 fffff 6
7 ggggg 8
8 hhhhh 2
9 iiiii 1
10 jjjjj 5
[root@test-centos7 ~]# awk '$2=="ccccc"' /work/test5_7.txt
3 ccccc 7

このように、Linux/UNIXのコマンドライン上でExcelのフィルタのような抽出をするなら、awkを使えばカンタンに行う事が出来る。

2015/10/01 追記

なお、条件部分は以下のように記述することも出来る。
こちらのほうが、同一列内で複数条件をor検索する際に楽なので、状況に応じて使い分けた方がいいかも。

awk '列 ~ /条件/ 対象ファイル'

20151001_000004

[root@test-centos7 ~]# cat /work/test5_7.txt
1 aaaaa 10
2 bbbbb 4
3 ccccc 7
4 ddddd 3
5 eeeee 9
6 fffff 6
7 ggggg 8
8 hhhhh 2
9 iiiii 1
10 jjjjj 5
[root@test-centos7 ~]#
[root@test-centos7 ~]# # こちらの書き方でも抽出出来る
[root@test-centos7 ~]# awk '$2 ~ /ccccc/' /work/test5_7.txt
3 ccccc 7
[root@test-centos7 ~]# # 複数条件がある場合は、「/~/」の間でパイプ区切りで記述する。
[root@test-centos7 ~]# awk '$2 ~ /ccccc|aaaaa/' /work/test5_7.txt
1 aaaaa 10
3 ccccc 7

 

Pocket

Written by blacknon

インフラ系のSE。一時期はプログラマ。 仮想化とオープンソースに興味あり。一日中寝てたい今日このごろ。 スペインとかで働きたいなぁ…(シエスタがあるので)

Leave a Comment

メールアドレスが公開されることはありません。