n61*_*007 3 command-line grep utilities text-processing wc
我有一个制表文件。我想检查每一行是否有相同数量的标签。
第一步,我想打印每一行的标签数。
我试过了grep -o '\t' infile | wc -l
,但我的实现grep
说grep: invalid option -- o
。还有其他方法吗?
很高兴:如果可能的话,由于个人喜好,我更喜欢使用 util(grep、cat 等)工具来做到这一点,最好不要 awk
或 bash 脚本。
我认为sed
etc. 不适合这个,一个简单的方法是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)
如果您的目标只是检测每行是否总是有相同数量的选项卡(没有 bash,没有 awk):
sed 's/[^\t]//g' file | sort -u | wc -l
Run Code Online (Sandbox Code Playgroud)
如果它输出1,那很好!
或者,替换sed
为tr
:
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)
诀窍是删除每一行上的所有非制表符,然后对剩下的进行排序/唯一化。