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

이상적으로는 다음보다 더 많은 것을 읽고 싶습니다. 엑스매개변수 및 미만매개변수 - 즉, 주어진 줄에 매개변수가 너무 많으면 읽혀지지 않습니다.

묻다: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 주위에 ""가 있는지 확인하십시오. 그렇지 않으면 개행 문자가 손실됩니다.

답변2

이것은 확실히 로 해결해야 할 작업이나 유사한 작업이 아니지만 sed자연스럽게 grep을 해결하는 데 사용됩니다 awk. 4개 이상의(쉼표로 구분된) 필드가 포함된 파일의 행을 필터링하려면 다음을 수행하십시오.

awk -F, 'NF>=4' my_csv_file.csv

예를 들어 4개 이상 6개(쉼표로 구분) 필드로 행을 필터링하려면 다음을 수행하세요.

awk -F, 'NF>=4 && NF<=6' my_csv_file.csv

관련 정보