У меня есть легкая функция оболочки для него (вставленный .bashrc
), который использует sed
printLine ()
{
sed -n -e "$1p" "$2"
}
Можно легко использовать его
$ printLine 2000,2250 file
Я использую функцию, потому что я всегда забываю корректное sed
- синтаксис.
Вы хотите сохранить вывод в другом файле, чем это легко:
$ printLine 2000,2250 file > output
Вот один способ получить точный вывод, который Вы ищете:
$ grep -nFx "$(sort sentences.txt | uniq -d)" sentences.txt
1:This is sentence X
4:This is sentence X
Объяснение:
Внутреннее $(sort sentences.txt | uniq -d)
списки каждая строка, которая происходит несколько раз. Внешнее grep -nFx
взгляды снова в sentences.txt
для точного -x
соответствия к любой из этих строк -F
и предварительно ожидает их номер строки -n
Не точно, что Вы хотите, но можно попытаться объединиться sort
и uniq -c -d
:
aularon@aularon-laptop:~$ cat input
This is sentence X
This is sentence Y
This is sentence Z
This is sentence X
This is sentence A
This is sentence B
aularon@aularon-laptop:~$ sort input | uniq -cd
2 This is sentence X
aularon@aularon-laptop:~$
2
вот количество дублирований, найденных для строки, от man uniq
:
-c, --count
prefix lines by the number of occurrences
-d, --repeated
only print duplicate lines
ЕСЛИ содержание файла умещается в памяти awk
хорошо для этого. Стандартная острота в comp.lang.awk (я не могу искать экземпляр от этой машины, но существуют несколько каждый месяц) просто обнаружить существует дублирование, awk 'n[$0]++'
который считает случаи каждого значения строки и печатает любое возникновение (возникновение) кроме первого, потому что действие по умолчанию print $0
.
Показать все случаи включая первое, в Вашем формате, но возможно в смешанном порядке, когда больше чем одно значение дублировано, становится немного более привередливым:
awk <sentences.txt ' !($0 in n) {n[$0]=NR;next} \
n[$0] {n[$0]=0; print "Line "n[$0]":"$0} \
{print "Line "NR":"$0} '
Показанный в нескольких строках для ясности, Вы обычно работаете вместе в реальном использовании. Если Вы часто делаете это, можно поместить awk
сценарий в файле с awk -f
, или конечно все это в сценарии оболочки. Как самый простой awk
это может быть сделано очень похоже с perl -n[a]
.
sort sentences.txt | uniq -d | grep -nFxf - sentences.txt
было бы немного более эффективным и избежит потенциалаarg list too long
проблемы. – Stéphane Chazelas 06.02.2014, 11:34