使用utils计算文本文件中每行的制表符

n61*_*007 3 command-line grep utilities text-processing wc

我有一个制表文件。我想检查每一行是否有相同数量的标签。

第一步,我想打印每一行的标签数。

我试过了grep -o '\t' infile | wc -l,但我的实现grepgrep: invalid option -- o。还有其他方法吗?


很高兴:如果可能的话,由于个人喜好,我更喜欢使用 util(grep、cat 等)工具来做到这一点,最好不要 awk或 bash 脚本。

tkr*_*nwa 6

我认为sedetc. 不适合这个,一个简单的方法是awk用 tab 作为字段分隔符调用:

printf $'hello\tworld\thugo\nfoo\tbar\nbaz\n' | awk -F$'\t' '{print NF-1;}'
Run Code Online (Sandbox Code Playgroud)

这使

2
1
0
Run Code Online (Sandbox Code Playgroud)


gni*_*urf 6

如果您的目标只是检测每行是否总是有相同数量的选项卡(没有 bash,没有 awk):

sed 's/[^\t]//g' file | sort -u | wc -l
Run Code Online (Sandbox Code Playgroud)

如果它输出1,那很好!

或者,替换sedtr

tr -cd \\t\\n < file | sort -u | wc -l
Run Code Online (Sandbox Code Playgroud)

或者如果您喜欢猫的无用用途并且不喜欢连接选项:

cat file | tr -c -d \\t\\n | sort -u | wc -l
Run Code Online (Sandbox Code Playgroud)

诀窍是删除每一行上的所有非制表符,然后对剩下的进行排序/唯一化。

  • 关于你的`tr` 解决方案,为什么不只是`tr -cd "\t" | wc -c`? (2认同)
  • 好的。知道了。我认为 `tr` 会尊重换行边界并默认生成逐行输出。 (2认同)