값에 캐리지 리턴이 포함되어 있어 실제 행 수를 가져올 수 없습니다.

값에 캐리지 리턴이 포함되어 있어 실제 행 수를 가져올 수 없습니다.

여기에 이미지 설명을 입력하세요.

입력 구분 기호 파일이 있습니다. 파일의 실제 레코드 수는 4입니다. 그러나 값의 캐리지 리턴 문자로 인해 총 개수는 이제 8입니다. 첫 번째 열 값을 기준으로 행 수를 계산하고 싶습니다.

대답은 다음과 같아야 합니다: 4.

다음 명령을 사용해 보았지만 그 중 아무 것도 작동하지 않았습니다.

grep -Eo '[0-9]+|' filename | sort -u | wc -l

awk -F '|' '{sub(/[^[:digit:]]+/, "", $1); a[$1]} END{for (z in a) ++i; print i}' filename

awk -F '|' '{sub(/[^[:digit:]]+/, "", $1); PRINT[$1]} END{for (z in a) ++i; print i}' filename

wc -l filename | sed 's/ *\([0-9]* \).*/\1/'

답변1

이것은 가장 가까운 것입니다:

grep -Eo '[0-9]+|' filename | sort -u | wc -l

하지만 목표를 놓쳤어

  • 줄 시작 부분에 일치 항목을 고정하지 마세요.
  • 데이터 정렬/불필요한 중복 제거

표현식을 고정하려면 "^"패턴 시작 부분에 표현식을 넣고 "|"를 이스케이프 처리하세요(메타 문자이기 때문).

grep -Eo '^[0-9]+\|' filename | sort -u | wc -l

다음 - 폐기 sort -u.grep은 연속된 줄을 무시하고 추가 정보를 사용하면 실제로 중복되지 않은 일부 "중복"을 제거하는 것처럼 보입니다.

마지막으로 다음을 삭제합니다 wc -l.POSIX grep-c일치 항목 수를 인쇄하도록 grep에 지시하는 옵션이 있습니다 . 이 -o옵션을 제거하세요(필수는 아님). 그래서 당신에게 필요한 것은

grep -Ec '^[0-9]+\|' filename

답변2

이것은 효과가 있을 수 있습니다

grep -c ^the desired string filename
wc -l thefile

관련 정보