当新行在数据中时,计算txt文件中的行数

我有一个 txt 文件,其中包含以下数据

Name    mobile  url message text
test11  1234567890  www.google.com  "Data Test New
Date:27/02/2020
Items: 1
Total: 3
Regards
ABC DATa
Ph:091 : 123456789"
test12  1234567891  www.google.com  "Data Test New one
Date:17/02/2020
Items: 26
Total: 5
Regards
user test
Ph:091 : 433333333"

现在您可以看到我的最后一列数据具有换行符。所以当我使用下面的命令时

awk 'END{print NR}' file.txt

它给我的长度是 15 但实际上线长度是 3 。请建议相同的命令

编辑部分:根据给出的答案,如果输入文件末尾没有换行符,则以下脚本不起作用

awk -v RS='"[^"]*"' '{gsub(/n/, " ", RT); ORS=RT} END{print NR "n"}' test.txt 

另外我的文件可能有 3-4 百万条记录。所以将文件转换为 unix 格式需要时间,这不是我的偏好。所以请提出一些在两种情况下都适用的最佳解决方案

head 5.csv | cat -A  
Above command is giving me the output

名称移动网址消息文本^M$

回答

使用gnu-awk您可以使用自定义来做到这一点RS

awk -v RS='"[^"]*"' '{gsub(/(r?n){2,}/, "n"); n+=gsub(/n/, "&")}
END {print n}' <(sed '$s/$//' file)

15001

这里:

  • -v RS='"[^"]*"':使用此正则表达式作为输入记录分隔符。匹配双引号字符串
  • n+=gsub(/n/, "&"): 虚拟替换n为自身并n在变量中计数n
  • END {print n}:打印n到底
  • sed '$s/$//' file: 最后一行添加一个换行符(以防它丢失)

代码演示


以上是当新行在数据中时,计算txt文件中的行数的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>