Подсчет уникальных значений в столбце со сценарием оболочки

Я имею файл с разделением табуляцией с 5 столбцами и должен получить количество просто количества уникальных строк из столбца 2. Я обычно делал бы это с Perl/Python, но я вынужден использовать оболочку для этого.

Я имею успешно в прошлом, используемом *, отклоняют функцию uniq, переданную по каналу в туалет, но похоже, что я оказываюсь перед необходимостью использовать awk в здесь.

Любой совет значительно ценился бы. (Я задал подобный вопрос ранее о проверках столбца с помощью awk, но это немного отличается, и я хотел разделить его поэтому, если у кого-то в будущем будет этот вопрос, то это будет здесь),

Много большое спасибо!
Lilly

5
задан Lilly Tooner 6 May 2010 в 13:31
поделиться

2 ответа

Нет необходимости использовать awk.

$ cut -f2 file.txt | sort | uniq | wc -l

должен это сделать.

Здесь используется тот факт, что табуляция является разделителем полей по умолчанию cut , поэтому таким образом мы получим только содержимое из второго столбца. Затем проход через sort работает как предварительный этап для uniq , который удаляет дубликаты. Наконец, мы подсчитываем количество строк, которое и является искомым числом.

18
ответ дан 18 December 2019 в 06:49
поделиться

I go for

$ cut -f2 file.txt | sort -u | wc -l

По крайней мере, в некоторых версиях, uniq полагается на то, что входные данные отсортированы (он просматривает только соседние строки).

Например, в документации по Solaris:

Утилита uniq читает входной файл, сравнивая соседние строки, и просматривает их. файл, сравнивая соседние строки, и записывает одну копию каждой входной строки на выходной файл. Вторая и последующие копии повторяющихся соседних входных не будут записаны.

Повторяющиеся строки на входе не будут будут обнаружены, если они не являются смежными.

5
ответ дан 18 December 2019 в 06:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: