如何获得通讯输出的第一列?

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

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

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

 comm -3 file1 file2 

但是这似乎不起作用。

这个表示还需要空格字符作为分隔符,当我的文件包含多个空格时,我会得到奇怪的结果。

我怎样才能得到comm的第一列?

Solutions Collecting From Web of "如何获得通讯输出的第一列?"

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

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

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

但是,如果你别无选择,只能处理comm的预运行输出,那么就像Carl提到的那样 , 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 

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

既然comm -23已经解释过了,也可以使用grep:

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

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