テキストの列フィルタ(cut)

cutコマンドを使用して、文字列の一部を切り取ってみます。

~$ echo HELLO | cut -b1,3,5
HLO
~$ 

cutに-bオプションを指定することで、列(BYTE)番号で文字列を切り取りができました。
上記例では、1、3、5BYTE目の文字のみが残るようにフィルタしました。

複数行であっても、まとめてフィルタすることができます。

~$ banner HELLO
#     # ####### #       #       #######
#     # #       #       #       #     #
#     # #       #       #       #     #
####### #####   #       #       #     #
#     # #       #       #       #     #
#     # #       #       #       #     #
#     # ####### ####### ####### #######

~$ banner HELLO | cut -b9-16
####### 
#       
#       
#####   
#       
#       
####### 

~$ 

オプション-b9-16と指定し、9BYTE目から16BYTE目に、Eを構成している文字列を切り取りました。

書式は「-b範囲」で、以下のような指定ができます
-b5-10 …… 5〜10BYTE目
-b-10 …… 1〜10BYTE目
-b5- …… 5BYTE目以降
-b5 …… 5BYTE目のみ
-b3,5 …… 3BYTE目と5BYTE目のみ
-b-8,20-28 …… 1〜8BYTE目と、20〜28BYTE目

cutで扱うテキストがタブ区切りの文字列であれば、フィールド指定ができます。
フィールド指定の確認のために、実験用テキストを作成してみます。

~$ seq -f "[%3g]" 50 | pr -t5J | tee sample.txt
[  1]	[ 11]	[ 21]	[ 31]	[ 41]
[  2]	[ 12]	[ 22]	[ 32]	[ 42]
[  3]	[ 13]	[ 23]	[ 33]	[ 43]
[  4]	[ 14]	[ 24]	[ 34]	[ 44]
[  5]	[ 15]	[ 25]	[ 35]	[ 45]
[  6]	[ 16]	[ 26]	[ 36]	[ 46]
[  7]	[ 17]	[ 27]	[ 37]	[ 47]
[  8]	[ 18]	[ 28]	[ 38]	[ 48]
[  9]	[ 19]	[ 29]	[ 39]	[ 49]
[ 10]	[ 20]	[ 30]	[ 40]	[ 50]
~$ 

teeコマンドで標準出力しつつ、sample.txtに保存しました。このsample.txtをcutのフィールド指定でフィルタしましょう。
まずは3列目のみ切り抜きます。

~$ cut -f3 sample.txt
[ 21]
[ 22]
[ 23]
[ 24]
[ 25]
[ 26]
[ 27]
[ 28]
[ 29]
[ 30]
~$ 

次は1列目と4列目以降を切り抜きます。

~$ cut -f1,4- sample.txt
[  1]	[ 31]	[ 41]
[  2]	[ 32]	[ 42]
[  3]	[ 33]	[ 43]
[  4]	[ 34]	[ 44]
[  5]	[ 35]	[ 45]
[  6]	[ 36]	[ 46]
[  7]	[ 37]	[ 47]
[  8]	[ 38]	[ 48]
[  9]	[ 39]	[ 49]
[ 10]	[ 40]	[ 50]
~$ 

このようにタブ区切りテキストを使えば、cutによるテキスト加工がし易くなります。

最後にcutコマンドを使った動画です。

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA