(O+P)ut

アウトプット



(O+P)ut

エンジニアのアウトプット

【Bash】Linuxで各行に指定の単語がいくつかあるのかをカウント

スポンサーリンク

やりたいこと

以下のようなCSVファイル(abc.csv)がありそれぞれの行の特定文字列(カンマ数)をカウントしたい。

a,b,c
d,e
f,g,h,i
j,k,

つまり上の場合は以下のように出力したい。

2
1
3
2
環境情報
$ bash --version
GNU bash, version 4.4.12(1)-release (x86_64-pc-linux-gnu)

やり方

#!/bin/bash
while read line
do
        echo $line | awk 'BEGIN{FS=","} {n+=NF} END{print n-1}'
done < ./abc.csv

以下、補足です。

補足

単語数をカウントする以下のワンライナーを利用しています。区切られたレコードの数が入っていますNFをカウントします。

$ awk '{n+=NF} END{print n}'

今回は指定の単語が「,」なので以下のように区切って

BEGIN{FS=","} 

レコード数ではなく区切り文字の数なので

END{print n-1}

マイナス1しています。

以上、同様のことをしたい方の参考になれば幸いです。