Bash脚本用于计算文本文件中的CR / LF

时间:2014-12-15 18:59:24

标签: linux bash shell awk

我读过很多awk& sed衬垫试图执行我需要的东西,似乎没有工作。我想要做的只是计算我的Linux文件中的CR / LF中断次数。这个文件也有普通的LF换行符,我只需要知道我导入的真实记录数。

我试过的一条这样的awk系列 awk '/^M$/{n++}; END { print n+0 }' my_file或其他一些。这没用。任何帮助都会很棒。我不是一个笨蛋大师,所以请放轻松。

3 个答案:

答案 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换行符的数量,字节顺序标记,文本或二进制文件,文件名。