Файл $HOME/.profile
используется многими оболочками, включая удар, sh, тире и возможно других.
Из страницы справочника удара:
Когда удар вызывается как интерактивная оболочка входа в систему... он сначала читает и выполняет команды из файла/etc/profile, если тот файл существует. После чтения того файла это ищет ~/.bash_profile, ~/.bash_login и ~/.profile, в том порядке, и читает и выполняет команды от первой, которая существует и читаема.
csh и tcsh явно не смотрят на ~/.profile
но те оболочки отчасти вытеснены.
perl -ne 'print unless $seen{$_}++' data.txt
Или, если у Вас должно быть бесполезное использование cat
:
cat data.txt | perl -ne 'print unless $seen{$_}++'
Вот awk
перевод, для систем, которые испытывают недостаток в Perl:
awk '!seen[$0]++' data.txt
cat data.txt | awk '!seen[$0]++'
Джону назвали инструмент unique
:
usr@srv % cat data.txt | unique out
usr@srv % cat out
aaaaaa
cccccc
bbbbbb
Достигнуть того же без дополнительных инструментов в единственной командной строке немного более сложно:
usr@srv % cat data.txt | nl | sort -k 2 | uniq -f 1 | sort -n | sed 's/\s*[0-9]\+\s\+//'
aaaaaa
cccccc
bbbbbb
nl
номера строки печати перед строками, поэтому если мы sort
/uniq
позади них мы можем восстановить первоначальный порядок строк. sed
просто удаляет номера строки впоследствии ;)
nl -ba -nrz data.txt | sort -k2 -u | sort | cut -f2
– don_crissti
07.11.2015, 21:33
Я предпочитаю использовать это:
cat -n data.txt | sort --key=2.1 -b -u | sort -n | cut -c8-
cat -n
добавляют номера строки,
sort --key=2.1 -b -u
виды на втором поле (после чисел добавленной строки), игнорируя начальные пробелы, сохраняя уникальные строки
sort -n
виды в строгом числовом порядке
cut -c8-
сохраните все символы от столбца 8 до EOL (т.е. опустите номера строки, которые мы включали),
Perl имеет модуль, который можно использовать, который включает вызванную функцию uniq
. Таким образом, если Вы авеню Ваши данные, загруженные в массиве в Perl, Вы просто вызываете функцию как это для создания этого уникальным, и все же поддержите первоначальный порядок.
use List::MoreUtils qw(uniq)
@output = uniq(@output);
Можно читать больше об этом модуле здесь: Список:: MoreUtils
{ if (!seen[$0]++) print }
– camh 25.04.2011, 01:32if
,print
, круглые скобки и фигурные скобки:awk '!seen[$0]++'
– Gordon Davisson 25.04.2011, 09:29'!LarryWall[$0]++'
для всех уходов о awk, но "замеченный" помогает людям понять программу лучше. – cjm 17.01.2012, 21:14