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’ が便利です。