使用comm命令对比ID列表,如何去除空格解决Excel空单元格问题?
解决comm命令输出分隔符导致Excel空单元格的问题
我懂你这种头疼的情况!comm命令默认的输出确实是用制表符(不是普通空格)来分隔三列的——这三列分别是「仅在第一个文件出现的内容」「仅在第二个文件出现的内容」「两个文件共有的内容」。你看到的“空格”其实是终端把制表符显示成了空格,这就导致Excel导入时把这些制表符当成列分隔符,出现空单元格。给你几个实用的解决办法:
1. 直接获取目标列(最推荐)
如果你只需要某一类结果(比如两个列表共有的ID),完全不用先输出所有列再处理,直接用comm的参数筛选:
- 仅保留两个文件共有的内容:
comm -12 file1.txt file2.txt - 仅保留第一个文件独有的内容:
comm -23 file1.txt file2.txt - 仅保留第二个文件独有的内容:
comm -13 file1.txt file2.txt
这样输出的内容没有任何分隔符,每个ID占一行,直接复制到Excel就不会有空单元格了。
2. 处理已有的comm输出
如果已经生成了comm的输出文件,想要把分隔符替换/删除:
- 把所有制表符换成换行,让每个ID单独占一行:
解释:cat comm_output.txt | tr -s '\t' '\n' | grep -v '^$'tr -s '\t' '\n'会把连续的制表符压缩成一个后替换成换行,grep -v '^$'用来过滤掉替换后产生的空行。 - 直接删除所有制表符(把三列内容合并成连续的文本):
cat comm_output.txt | tr -d '\t' - 把制表符换成Excel友好的分隔符(比如逗号),方便导入:
cat comm_output.txt | tr -s '\t' ','
3. 先确认分隔符类型
不确定是不是制表符的话,可以用这个命令查看输出里的特殊字符:
cat comm_output.txt | cat -A
如果看到^I,就说明是制表符(这是终端对制表符的显示方式)。
内容的提问来源于stack exchange,提问作者Juan LB
相关产品推荐
相关产品推荐

