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

时间:2011-11-28 17:10:08

标签: linux shell command-line comm

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

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

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

comm -3 file1 file2

但这似乎不起作用。

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

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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:7)

对于这个问题,

cut(1)可能是比awk更好的选择。

答案 2 :(得分:3)

您可以将>>> import pandas as pd >>> s = pd.Series([1, 2, 3, 4]) >>> s 0 1 1 2 2 3 3 4 dtype: int64 >>> s.quantile(0.5) 2.5 >>> s.quantile([0.25, 0.5, 0.75]) Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/usr/lib/python2.7/dist-packages/pandas/core/series.py", line 1324, in quantile result = _quantile(valid_values, q * 100) File "/usr/lib/python2.7/dist-packages/pandas/compat/scipy.py", line 66, in scoreatpercentile idx = per / 100. * (values.shape[0] - 1) TypeError: unsupported operand type(s) for /: 'list' and 'float' comm-2一起使用(作为already explained above),或将-3comm一起使用,如:

grep

因此输出不会包含任何尾随空格。这对非grep -o '^\S\+' <(comm file1 file2) 命令很有用。