Получение повторяющихся записей на нескольких запусках sed - PullRequest
0 голосов
/ 03 мая 2019

Я использую следующую команду sed, чтобы избавиться от дубликатов

Но она по-прежнему вызывает повторяющиеся записи при нескольких запусках

sed -i '/^text1/i\value=value+1' file.txt | uniq

Здесь uniq не помогаетизбавиться от повторяющихся записей

1 Ответ

0 голосов
/ 03 мая 2019

Во-первых, когда вы запускаете sed -i, sed ничего не выводит на стандартный вывод.Вот почему пайпинг к uniq бесполезен.


Во-вторых, uniq необходимо отсортировать входные данные для работы:

sed ... file.txt | sort | uniq > file.txt.tmp
mv file.txt.tmp file.txt

Вы также можете использовать -uфлаг sort:

sed ... file.txt | sort -u > file.txt.tmp
mv file.txt.tmp file.txt

Если порядок строк должен быть сохранен, вы можете использовать awk:

awk 'seen[$0]++{next} /^text1/{print "value=value+1";print}' file.txt > file.txt.tmp
mv file.txt.tmp file.txt

Кстати, GNU awk поставляется сспособ изменения файлов на месте в настоящее время:

gawk -i inplace 'seen[$0]++{next} /^text1/{print "value=value+1";print}' file.txt
...