由于值中嵌入了回车符,无法获取实际行数:

由于值中嵌入了回车符,无法获取实际行数:

在此输入图像描述

我有一个输入分隔符文件。文件中的实际记录数是 4。但是由于值中存在回车符,现在总计数是 8。我只想根据第一列值计算行数。

答案应该是:4。

我尝试使用这些命令,但没有一个起作用:

grep -Eo '[0-9]+|' filename | sort -u | wc -l

awk -F '|' '{sub(/[^[:digit:]]+/, "", $1); a[$1]} END{for (z in a) ++i; print i}' filename

awk -F '|' '{sub(/[^[:digit:]]+/, "", $1); PRINT[$1]} END{for (z in a) ++i; print i}' filename

wc -l filename | sed 's/ *\([0-9]* \).*/\1/'

答案1

这是最接近的:

grep -Eo '[0-9]+|' filename | sort -u | wc -l

但它错过了目标

  • 不将匹配锚定到行的开头
  • 不必要地对数据进行排序/删除重复项

要锚定表达式,请将其放在"^"模式的开头,并转义“|” (因为它是元字符):

grep -Eo '^[0-9]+\|' filename | sort -u | wc -l

接下来 - 丢弃sort -u. grep 忽略连续行,并且如果使用额外信息,则似乎可以删除一些并非真正重复的“重复项”。

最后,丢弃wc -lPOSIX grep有一个-c选项告诉 grep 打印匹配的计数。删除该-o选项(不需要)。所以你需要的是

grep -Ec '^[0-9]+\|' filename

答案2

这可能有效

grep -c ^the desired string filename
wc -l thefile

相关内容