![如何确定给定分隔符的二进制文件中的记录数](https://linux22.com/image/175410/%E5%A6%82%E4%BD%95%E7%A1%AE%E5%AE%9A%E7%BB%99%E5%AE%9A%E5%88%86%E9%9A%94%E7%AC%A6%E7%9A%84%E4%BA%8C%E8%BF%9B%E5%88%B6%E6%96%87%E4%BB%B6%E4%B8%AD%E7%9A%84%E8%AE%B0%E5%BD%95%E6%95%B0.png)
我想确定给定二进制文件中的记录数。文件的分隔符作为用户的输入。总计 我该如何继续?
答案1
LC_ALL="C" awk -v RS="${Delim}" 'END { print NR; }' < filename
RS 是记录分隔符,并且是正则表达式,因此错误(即无效的正则表达式)将使脚本失败。
LC_ALL="C" 是临时导出,以避免二进制中的任意字节值可能被解释为 UTF-8 编码的问题。
但是,我有兴趣了解任何指定的分隔符如何在二进制文件中工作,其中每个整数、浮点数或双精度数中的任何单个字节的范围可以从 0x00 到 0xFF。
您还可以删除所有不是分隔符的字节,然后计算剩下的字节。在这种情况下,Delim 不是一个模式,但它可以是一组字符,可能需要根据手册页进行转义。
tr -cd "${Delim}" < filename | wc -c
请注意,tr 中的“set”不是多字节条目:“ab”测试“a”或“b”,而不是“ab”。