Подтвердить что ты не робот

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

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

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

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

comm -3 file1 file2

Но это не работает.

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

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

4b9b3361

Ответ 1

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

Первый столбец вывода "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

Ответ 2

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

Ответ 3

Поскольку comm -23 уже было объяснено, также можно использовать grep:

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

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