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

jiv*_*key 4 linux bash shell awk

我读过许多awk&sed的内衬来尝试执行我需要的功能,但似乎都没有效果。我想做的只是简单地计算Linux文件中CR / LF中断的次数。该文件也包含普通的LF换行符,我只需要知道要导入的真实记录数即可。

我尝试过的一种这样的awk行是 awk '/^M$/{n++}; END { print n+0 }' my_file这样的。这没有用。任何帮助都会很棒。我不是awk专家,所以请放轻松。

Tom*_*ech 7

使用支持多字符记录分隔符的GNU awk:

awk -v RS='\r\n' 'END{print NR}' file
Run Code Online (Sandbox Code Playgroud)

这会将记录分隔符设置为\r\n并打印记录总数。

例如:

$ echo $'record 1\r\nrecord\n2\r\nrecord 3' > file
$ awk -v RS='\r\n' 'END{print NR}' file
3
Run Code Online (Sandbox Code Playgroud)

对于那些认为此答案不正确的人,让我提出另一个示例。考虑文件:

bash-4.2$ cat -vet file
line 1$
line 2$
line 3bash-4.2$
Run Code Online (Sandbox Code Playgroud)

(shell提示有意留在其中以显示文件末尾)

使用普通的UNIX行结尾,并且文件末尾没有换行符。该文件中有多少条记录?我个人说有3个。但是,只有两个换行符。


anu*_*ava 5

您可以使用它grep来计数以结尾的所有行CR/LF

grep -c $'\r$' file
Run Code Online (Sandbox Code Playgroud)

模式$'\r$'将仅匹配以结尾的行,\r\n-c为您提供这些行的计数。