2014-12-15 2 views
1

많은 awk & sed 라이너를 읽고 필요한 작업을 수행하고 아무 것도 작동하지 않는 것 같습니다. 내가하려는 것은 단순히 리눅스 파일에서 CR/LF 휴식 횟수를 세는 것입니다. 이 파일에는 일반 LF 개행 문자도 있습니다. 실제로 가져올 실제 레코드의 수를 알아야합니다.텍스트 파일에서 CR/LF를 계산하는 Bash 스크립트

시도한 awk 라인 중 하나는 awk '/^M$/{n++}; END { print n+0 }' my_file 또는 일부입니다. 이것은 작동하지 않았다. 어떤 도움이라도 좋을 것입니다. 나는 awk 전문가가 아니다. 그래서 쉽게 가라. 다중 문자 구분 기록 지원 GNU AWK를 사용

+3

@anubhava 파일이 CRLF와 LF가 혼합되어 있고 * CRLF가 아닌 것으로 생각하십니까? – Carpetsmoker

+1

"true"레코드는 LF 단독으로, CRLF만으로 또는 둘 모두로 구분됩니까? –

답변

3

는 :

awk -v RS='\r\n' 'END{print NR}' file 

\r\n에 레코드 분리를 설정하고, 레코드의 총수를 출력한다. 예를 들어

:이 답변은 잘못된 생각들로

$ echo $'record 1\r\nrecord\n2\r\nrecord 3' > file 
$ awk -v RS='\r\n' 'END{print NR}' file 
3 

은 나에게 또 다른 예를 제시 할 수 있습니다.

bash-4.2$ cat -vet file 
line 1$ 
line 2$ 
line 3bash-4.2$ 

정상 UNIX 라인 끝으로, 파일의 마지막에 개행

(쉘은 의도적으로 파일의 끝을 보여에서 왼쪽 프롬프트) : 파일을 고려하십시오. 이 파일에는 몇 개의 레코드가 있습니까? 개인적으로, 나는 3이 있다고 말할 것입니다. 그러나 단 두 개의 개행 문자가 있습니다.

+1

파일에 CRLF가 2 개 밖에없는 경우 샘플 출력은 3입니다. 마지막 줄은 LF로 끝나고 에코에 의해 삽입됩니다. – ComputerDruid

+0

@ComputerDruid OP가 문자 수 계산에 관심이 있는지 또는 기록. –

+0

줄 바꿈은 파일의 끝에서 규칙으로 사용됩니다. 심지어 wc -l은 마지막 줄에 줄 바꿈이 없으면 마지막 줄을 계산하지 않습니다. http://stackoverflow.com/a/7741505/276093 –

3

grepCR/LF로 끝나는 모든 라인을 계산하는 데 사용할 수 있습니다

grep -c $'\r$' file 

패턴 $'\r$' 당신이 그 라인의 계산 줄 것이다 \r\n-c로 끝나는 경우에만 그 라인을 일치합니다.

예 출력 :

+0

을 참조하십시오.이 예제에서는 3 개의 레코드가 포함 된 예제 파일에 대해 2를 출력합니다. –

+0

예 참으로 awk 명령은 추가 카운트 즉'3'을 제공하지만 샘플에서'\ r \ n'으로 끝나는 두 줄만 볼 수 있습니다. – anubhava

0

현대 dos2unix 유틸리티는 CR/LF 라인의 수를 계산 할 수

$ dos2unix -i *.txt 
6  0  0 no_bom text dos.txt 
0  6  0 no_bom text unix.txt 
0  0  6 no_bom text mac.txt 
6  6  6 no_bom text mixed.txt 
50  0  0 UTF-16LE text utf16le.txt 
0  50  0 no_bom text utf8unix.txt 
50  0  0 UTF-8  text utf8dos.txt 
2  418  219 no_bom binary dos2unix.exe 

은 DOS의 줄 바꿈 수 유닉스 줄 바꿈 수, 맥 줄 바꿈의 수입니다 , 바이트 순서 표시, 텍스트 또는 바이너리, 파일 이름.

관련 문제