如何获得comm输出的第一列?

问题描述 投票:27回答:3

所以我试图使用awk获得第一列通信输出。我读到Tab被用作comm的分隔符,所以我做了:

awk -F"\t" '{print $1}' comm-result.txt

使用comm-result.txt包含输出:

comm -3 file1 file2

但这似乎不起作用。

这个推荐还将空格字符作为分隔符,当我的文件包含多个空格时,我得到了奇怪的结果。

我怎么才能从comm获得第一列?

linux shell command-line comm
3个回答
32
投票

“所以我试图获得第一列通信输出”

comm file1 file2”输出的第一列包含file1独有的行。您可以通过简单地使用comm(抑制-2独有的行)和file2(抑制两个文件中出现的行)调用-3来跳过后处理。

comm -2 -3 file1 file2   # will show only lines unique to file1

但是,如果您别无选择,只能处理comm的预运行输出,那么作为Carl mentionedcut将是一个选项:

cut -f1 comm-results.txt

但是,对于第1列为空的情况,这会导致空行。要解决这个问题,也许awk可能更适合:

awk -F"\t" '{if ($1) print $1}' comm-results.txt
     ----    ----------------
      |                     |
   Use tab as delimiter     |
                            +-- only print if not empty

7
投票

对于这个问题,cut(1)可能是比awk更好的选择。


3
投票

你可以使用comm-2-3(作为already explained above),或者使用commgrep一样:

grep -o '^\S\+' <(comm file1 file2)

所以输出不包含任何尾随空格。这对非comm命令很有用。

© www.soinside.com 2019 - 2024. All rights reserved.