Shoyan blog

Sedやawkを使ってテキストから必要な列のみ取得する

以下のような文字列(ファイルに保存されているとする)からsedやawkを使ってlabelだけとるshell芸を紹介します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
+-------------------------+-------+
| label                   | state |
+-------------------------+-------+
| A                       |     0 |
| B                       |     0 |
| C                       |     0 |
| D                       |     0 |
| E                       |     0 |
| F                       |     0 |
| G                       |     0 |
| H                       |     2 |
| I                       |     0 |
| J                       |     0 |
| K                       |     0 |
+-------------------------+----———+

label列のみ取得

1
2
3
4
5
6
7
8
9
10
11
12
⇒  sed -n '4,14p' table.txt | awk '{print $2}'
A
B
C
D
E
F
G
H
I
J
K

スペース区切りに加工する

1
2
⇒  sed -n '4,14p' table.txt | awk '{print $2 " "}' | tr -d '\n'
A B C D E F G H I J K

sed -n '4,14p’ で指定した行数のみ取得しています
次にawk '{print $2}’ でlabel列のみ抽出しています。
改行を消すのは tr -d '\n’ が便利です。

Comments