입력 구분 기호 파일이 있습니다. 파일의 실제 레코드 수는 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