use*_*875 4 regex shell ubuntu awk sed
我有一个 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"
Run Code Online (Sandbox Code Playgroud)
现在您可以看到我的最后一列数据具有换行符。所以当我使用下面的命令时
awk 'END{print NR}' file.txt
Run Code Online (Sandbox Code Playgroud)
它给我的长度是 15 但实际上线长度是 3 。请建议相同的命令
编辑部分:根据给出的答案,如果输入文件末尾没有换行符,则以下脚本不起作用
awk -v RS='"[^"]*"' '{gsub(/\n/, " ", RT); ORS=RT} END{print NR "\n"}' test.txt
Run Code Online (Sandbox Code Playgroud)
另外我的文件可能有 3-4 百万条记录。所以将文件转换为 unix 格式需要时间,这不是我的偏好。所以请提出一些在两种情况下都适用的最佳解决方案
head 5.csv | cat -A
Above command is giving me the output
Run Code Online (Sandbox Code Playgroud)
名称移动网址消息文本^M$
使用gnu-awk您可以使用自定义来做到这一点RS:
awk -v RS='"[^"]*"' '{gsub(/(\r?\n){2,}/, "\n"); n+=gsub(/\n/, "&")}
END {print n}' <(sed '$s/$//' file)
15001
Run Code Online (Sandbox Code Playgroud)
这里:
-v RS='"[^"]*"':使用此正则表达式作为输入记录分隔符。匹配双引号字符串n+=gsub(/\n/, "&"): 虚拟替换\n为自身并\n在变量中计数nEND {print n}:打印n到底sed '$s/$//' file: 最后一行添加一个换行符(以防它丢失)