Как получить первый столбец вывода комм? - PullRequest
27 голосов
/ 28 ноября 2011

Итак, я пытаюсь получить первый столбец вывода комм, используя awk.Я прочитал, что Tab использовался как разделитель для связи, поэтому я сделал:

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

С comm-result.txt, содержащим вывод:

comm -3 file1 file2

Но это не похожена работу.

Эта рекомендация также принимает символ пробела в качестве разделителя, и я получаю странные результаты, когда мои файлы содержат несколько пробелов.

Как я могу получить только первый столбец из comm?

Ответы [ 3 ]

32 голосов
/ 28 ноября 2011

"Итак, я пытаюсь получить первый столбец вывода комм."

Первый столбец вывода "comm file1 file2" содержит строки, уникальные для file1. Вы можете пропустить постобработку, просто вызвав comm с -2 (подавление строк, уникальных для file2) и -3 (подавление строк, которые появляются в обоих файлах).

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

Однако, если у вас нет выбора, кроме как обработать предварительный вывод comm, тогда как Карл упомянул , 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
7 голосов
/ 28 ноября 2011

cut(1), вероятно, является лучшим выбором, чем awk для этой проблемы.

3 голосов
/ 12 ноября 2015

Вы можете использовать comm с -2 и -3 (как уже объяснено выше ), или использовать comm с grep, например:

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

, поэтому выходные данные не будут содержать завершающих пробелов. Это полезно для не comm команд.

...