특정 열의 길이 조건을 사용하여 행 인쇄

특정 열의 길이 조건을 사용하여 행 인쇄

열 26의 항목 길이가 10이어야 하는 매우 큰 csv 파일을 구문 분석하고 있습니다. 항목이 없는 경우도 있는 것을 알 수 있지만(괜찮습니다) 항목의 길이가 10보다 작거나 10보다 큰 경우도 있는데 이는 잘못된 것입니다. 저는 탐색하기 위해 이 줄 중 일부를 인쇄하려고 합니다.

내 시도는 다음과 같습니다

awk 'length($26) < 10' my_file.csv | sort -u | cut -d ',' -f 26 | head

그러나 이것은 내가 원하는 결과를 반환하지 않습니다. 대신 열 26의 길이가 실제로 10과 같은 일부 행을 반환합니다. 내가 뭘 잘못했나요?

답변1

awk -F, 'length($26) != 10 { print }' /path/to/input > bad_field_length.txt

답변2

나는 다음과 같은 것을 시도할 것입니다:

awk -F "," 'length($26) != 10 {print $26}' my_file.csv

그런 다음 필요한 경우 필요한 다른 필터(예: 정렬 등)를 통해 이 출력을 계속 파이프할 수 있습니다.

awk에게 쉼표를 사용하여 열을 구분하도록 지시합니다.

-F ","

열 26의 길이가 10과 같지 않으면 열 26을 인쇄합니다.

'length($26) != 10 {print $26}' 

답변3

cat FileName|awk -F ',' 'length($3)<=9 {print $3}'|sort -u

이것은 나에게 효과적입니다. $3이 레코드를 필터링한 열인 경우 원하는 열로 바꿀 수 있습니다. 이 정렬은 고유한 레코드만 정렬하는 데 사용됩니다.

관련 정보