首页 > 解决方案 > 当新行在数据中时计算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

姓名 手机 url 消息文本^M$

标签: regexshellubuntuawksed

解决方案


使用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:最后一行添加一个换行符(以防它丢失)

代码演示


推荐阅读