Удаление дублирующихся записей в текстовом файле

Я запускаю облачный сервис для своей семьи и сделал этот быстрый скрипт, который я запускаю в cron каждое утро в 5, потому что я дешёвый и не куплю статический IP.

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

#!/bin/bash
ipvariable=$(wget http://ipecho.net/plain -O - -q);

echo "Today the location is http://$ipvariable:123456/foldertheyreach" | mail -s   "From your friendly cloud service provider" user1@someemail.com, user2@ect.com
0
18.03.2015, 16:39
3 ответа

Вы можете использовать awk:

awk '!x[$1]++ { print $1 }' file
3
28.01.2020, 02:13

Uniq не сортирует и не снимает остальную часть строки. uniq -d показывает только дублированные строки, что не то же самое, что показывать каждую строку один раз (т.е. с -d она должна быть там дважды, и последовательно показываться)

Сначала вырезаются неинтересные столбцы, затем сортируются, а затем находят уникальные элементы:

cut -d ' ' -f 1 your_file | sort | uniq
3
28.01.2020, 02:13

uniq -d перечисляет только дублированные строки из своего входа; так как ваш файл не содержит дубликатов строк (рассматривается во всей их полноте), он ничего не выводит.

Чтобы получить нужный результат, необходимо извлечь первый столбец и отфильтровать его:

cut -d\  -f1 file | uniq

в предположении, что ваш файл отсортирован (uniq только фильтрует дублирующие друг друга соседние строки); в противном случае

cut -d\  -f1 file | sort -u

Или вы можете сделать это с помощью awk, как указано в taliezin, с небольшим вариантом, чтобы вывести только первый столбец:

awk '!x[$1]++ { print $1 }' file
3
28.01.2020, 02:13

Теги

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