連続した空白のフィールドを awk ,cut で切り出す
Contents
連続した空白(スペース)で区切られたフィールドを取り出す(awk ,cut)
ログなどで設定ファイルで空白で区切られている場合、cutコマンドで「cut -d " " -f3」とかで取り出せますが、連続した空白の場合は正しく取り出せません
$ cat test.txt 0 1 test a 1 3 test1 b 2 5 test2 c 3 7 test3 d 4 9 test4 e 5 11 test5 f $ cat test.txt |cut -d " " -f3 11
これを取り出す方法を紹介します
awkコマンドで連続した空白(スペース)で区切られたフィールドを取り出す
awkコマンドで連続した空白で区切られているフィールドを取り出すのは簡単で「cat (ファイル) | awk '{print $3}’」とかで3つ目の区切られているフィールドを取り出せます。awkコマンドでは連続した空白は一つの区切りとして扱われます
書式:cat (ファイル) | awk '{print $(取り出すフィールドの場所)}
例: $ cat /var/tmp/test.txt | awk '{print $2}’
/var/tmp/test.txtのスペース区切りの2つ目を取得しています
$ cat test.txt | awk '{print $3}' test test1 test2 test3 test4 test5
プロセスコマンドでも同じように連続した空白で区切れています。
下記ではapacheが使用しているプロセスIDを取得しています
$ ps -ef | grep httpd | awk '{print $2}' 1453 2534 3696 4161 4664 5150
cutコマンドで連続した空白(スペース)で区切られたフィールドを取り出す
cutコマンドで連続した空白で区切られているフィールドを取り出すのは難しいので、連続した空白を一つのタブに変換後してから切り出します。
下記では「sed 's/[\t ]\+/\t/g’」で連続した空白を一個のタブに変換してからcutコマンドで切り出しています
$ cat test.txt |sed 's/[\t ]\+/\t/g' | cut -f3 test test1 test2 test3 test4 test5
プロセスコマンドでも同様に一度タブに変換してからだと正しく連続した空白でも取り出せます
# 連続した空白と区切られている場合はプロセスIDは取り出せない $ ps -ef | grep httpd | cut -f2 -d " " # 連続した空白と区切られている場合は一度タブに変換後にプロセスIDは取り出す $ ps -ef | grep httpd |sed 's/[\t ]\+/\t/g' | cut -f2 1753 2234 3696 4161 4664 5150 5151
ディスカッション
コメント一覧
まだ、コメントがありません