我读过很多awk& sed衬垫试图执行我需要的东西,似乎没有工作。我想要做的只是计算我的Linux文件中的CR / LF中断次数。这个文件也有普通的LF换行符,我只需要知道我导入的真实记录数。
我试过的一条这样的awk系列
awk '/^M$/{n++}; END { print n+0 }' my_file
或其他一些。这没用。任何帮助都会很棒。我不是一个笨蛋大师,所以请放轻松。
答案 0 :(得分:6)
使用GNU awk,它支持多字符记录分隔符:
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$
(shell提示故意留下来显示文件的结尾)
使用正常的UNIX行结尾,并且文件末尾没有换行符。这个文件中有多少条记录?就个人而言,我会说有3个。但是,只有两个换行符。
答案 1 :(得分:4)
您可以使用此grep
来计算以CR/LF
结尾的所有行:
grep -c $'\r$' file
模式$'\r$'
仅匹配以\r\n
结尾的那些行,而-c
将为您计算这些行。
答案 2 :(得分:1)
现代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换行符的数量,Unix换行符的数量,Mac换行符的数量,字节顺序标记,文本或二进制文件,文件名。