29

所以我试图使用awk. 我读到 Tab 被用作 comm 的分隔符,所以我做了:

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

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

comm -3 file1 file2

但这似乎不起作用。

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

我怎样才能只得到第一列comm

4

3 回答 3

35

“所以我正在尝试获取第一列通讯输出”

comm file1 file2" " 输出的第一列包含file1. comm您可以通过简单地调用( -2suppress lines unique to file2) 和-3(suppress lines that同时出现在两个文件中)来跳过后处理。

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

但是,如果您别无选择,只能处理Carl 提到comm的then的预运行输出,则可以选择:cut

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
于 2011-11-28T17:18:20.047 回答
8

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

于 2011-11-28T17:12:36.587 回答
3

您可以使用commwith -2and -3如上所述),或使用commwith greplike:

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

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

于 2015-11-12T09:59:16.477 回答