Я имею файл с разделением табуляцией с 5 столбцами и должен получить количество просто количества уникальных строк из столбца 2. Я обычно делал бы это с Perl/Python, но я вынужден использовать оболочку для этого.
Я имею успешно в прошлом, используемом *, отклоняют функцию uniq, переданную по каналу в туалет, но похоже, что я оказываюсь перед необходимостью использовать awk в здесь.
Любой совет значительно ценился бы. (Я задал подобный вопрос ранее о проверках столбца с помощью awk, но это немного отличается, и я хотел разделить его поэтому, если у кого-то в будущем будет этот вопрос, то это будет здесь),
Много большое спасибо!
Lilly
Нет необходимости использовать awk.
$ cut -f2 file.txt | sort | uniq | wc -l
должен это сделать.
Здесь используется тот факт, что табуляция является разделителем полей по умолчанию cut
, поэтому таким образом мы получим только содержимое из второго столбца. Затем проход через sort
работает как предварительный этап для uniq
, который удаляет дубликаты. Наконец, мы подсчитываем количество строк, которое и является искомым числом.
I go for
$ cut -f2 file.txt | sort -u | wc -l
По крайней мере, в некоторых версиях, uniq
полагается на то, что входные данные отсортированы (он просматривает только соседние строки).
Например, в документации по Solaris:
Утилита uniq читает входной файл, сравнивая соседние строки, и просматривает их. файл, сравнивая соседние строки, и записывает одну копию каждой входной строки на выходной файл. Вторая и последующие копии повторяющихся соседних входных не будут записаны.
Повторяющиеся строки на входе не будут будут обнаружены, если они не являются смежными.