Ответ 1
Использование awk:
awk '{!seen[$0]++};END{for(i in seen) if(seen[i]==1)print i}' file
eagle
forest
Как я могу напечатать только те строки, которые появляются ровно один раз в файле? Например, данный файл:
mountain
forest
mountain
eagle
Выход будет таким, потому что строка mountain
появляется дважды:
forest
eagle
Использование awk:
awk '{!seen[$0]++};END{for(i in seen) if(seen[i]==1)print i}' file
eagle
forest
Используйте sort
и uniq
:
sort inputfile | uniq -u
Опция -u
заставит uniq
печатать только уникальные строки. Цитата из man uniq
:
-u, --unique
only print unique lines
Для вашего ввода, он будет производить:
eagle
forest
Obs: Не забудьте sort
перед uniq -u
потому что uniq
работает на соседних строках. Так что uniq -u
самом деле делает, чтобы печатать строки, которые не имеют идентичных соседних линий, но это не значит, что они действительно уникальны. Когда вы sort
, все идентичные строки группируются вместе, и после uniq -u
останутся только те строки, которые действительно уникальны в файле.
У вас почти был ответ на ваш вопрос:
sort filename | uniq -u