CSVファイルの特定の行にあるパラメータの数を計算する方法

CSVファイルの特定の行にあるパラメータの数を計算する方法

次のようにCSVファイルにデータを蓄積しました。

Parameter_1,Parameter_2,Parameter_3,Parameter_4,Parameter_5,Parameter_6
Parameter_1,Parameter_2,Parameter_3,Parameter_4
Parameter_1,Parameter_2,Parameter_3,Parameter_4
Parameter_1,Parameter_2,Parameter_3,Parameter_4,Parameter_5
Parameter_1,Parameter_2,Parameter_3,Parameter_4
Parameter_1,Parameter_2,Parameter_3
Parameter_1,Parameter_2,Parameter_3,Parameter_4
Parameter_1
Parameter_1,Parameter_2,Parameter_3,Parameter_4

4つ以上のパラメータを持つ行をどのように読み取ることができますか?

Parameter_1,Parameter_2,Parameter_3,Parameter_4,Parameter_5,Parameter_6
Parameter_1,Parameter_2,Parameter_3,Parameter_4
Parameter_1,Parameter_2,Parameter_3,Parameter_4
Parameter_1,Parameter_2,Parameter_3,Parameter_4,Parameter_5
Parameter_1,Parameter_2,Parameter_3,Parameter_4
  X Parameter_1,Parameter_2,Parameter_3 X DO NOT READ THIS because it has less than 4 parameters
Parameter_1,Parameter_2,Parameter_3,Parameter_4
  X Parameter_1 X DO NOT READ THIS because it has less than 4 parameters
Parameter_1,Parameter_2,Parameter_3,Parameter_4

理想的には、以下より多くを読んでみたいです。 Xパラメータと未満はいパラメータ - つまり、指定された行にパラメータが多すぎると読み込まれません。

尋ねる:BASHでこれをどう書きますか?

? ㅏ:コードは次のようになります。

number_of_parameters=`"$line" | sed 's/[^,]//g' | wc -c` #where $line is the line thats being currently read
if [ "number_of_parameters" -gt "X" ] && [ "number_of_parameters" -lt "Y" ]
then
     ... do something
fi

ベストアンサー1

grepを使用すると、より簡単な解決策が得られます。

grep -E '^(.*,){3}' my_csv_file.csv

4つ以上のパラメータには少なくとも3つのカンマがあるため、正規表現では3つになります。

(.*,)カンマが付いた引数と一致します。.*すべての文字(.)が0回以上一致することを示します。

変数に値を格納する別の方法は次のとおりです。

my_var=$(grep -E '^(.*,){3}' my_csv_file.csv)
echo "$my_var"

$my_varの周りに ""があることを確認してください。それ以外の場合は改行文字が失われます。

おすすめ記事