Сортировать по конвейеру, чтобы UniQ неожиданный вывод

261
trueCamelType

У меня есть файл, который выглядит так:

"string",192.168.1.0,,TX,192.168.1.2,,,100,0,0,10,10,10,, "string",192.168.1.0,,TX,192.168.1.1,,,100,0,0,10,10,10,, "string",192.168.1.0,,TX,192.168.1.4,,,100,0,0,10,10,10,, "string",192.168.1.0,,TX,192.168.1.2,,,100,0,0,10,10,10,, 

С помощью этой команды я ожидаю, что она извлечет второй IP-адрес и в основном перечислит, сколько раз этот IP указан в этом файле.

cat originalFile.txt | awk -F "," '' | sort | uniq -c > outputFile.txt 

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

1 192.168.1.1 1 192.168.1.4 2 192.168.1.2 

Я попытался изменить раздел сортировки на

sort -n -k1 

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

 cat originalFile.txt | awk -F "," '' | sort | uniq -c > outputFile1.txt sort -n -k1 outputFile1.txt > outputFile2.txt 

Очевидно, что использование временного файла для этого не идеально, и я уверен, что мне просто нужно немного изменить это и поместить в другом порядке. Любая помощь приветствуется.

0
`uniq -c` сортирует по элементам, а не по количеству. Если вы хотите отсортировать по количеству, вам нужно будет передать вывод еще раз. ernie 9 лет назад 0

1 ответ на вопрос

1
jjanes

Sort for the uniq, then later sort for the final order:

cat originalFile.txt | awk -F "," '' | sort | uniq -c | sort -n 

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