Удалить дубликаты данных из текстового файла на основе конкретных повторяющихся критериев - PullRequest
0 голосов
/ 06 сентября 2018

У меня есть текстовый файл, в котором я хочу удалить несколько строк. Пример содержимого файла ниже -

v1 has output 1.1
v2 has output 10.2
v3 has output 5.4
v4 has output 1.1
v5 has output 10.2
v6 has output 12
------------------
and so on

, как видно из приведенного выше значения 1.1 и 10.2, повторяется несколько раз, я хочу сохранить первые 10 строк 1.1 и 10.2 и многое, похожее на них (эти значения разные и в сотнях разных чисел), но удалить все последующие дубликаты, даже если значение параметра v каждый раз отличается и также хочет сохранить неповторяющиеся данные.

Я пытаюсь отсортировать с помощью uniq, но он только устраняет одинаковые совпадающие дубликаты, но не на основе определенных условий.

sort file.txt | uniq -i

Ответы [ 2 ]

0 голосов
/ 06 сентября 2018

Похоже, все, что вам нужно, это:

awk '++cnt[$NF]<11' file

, например

$ cat file
v1 has output 1.1
v2 has output 10.2
v3 has output 5.4
v4 has output 1.1
v5 has output 10.2
v6 has output 12
v7 has output 1.1
v8 has output 10.2
v9 has output 5.4
v10 has output 1.1
v11 has output 10.2
v12 has output 12

$ awk '++cnt[$NF]<3' file
v1 has output 1.1
v2 has output 10.2
v3 has output 5.4
v4 has output 1.1
v5 has output 10.2
v6 has output 12
v9 has output 5.4
v12 has output 12
0 голосов
/ 06 сентября 2018

Вот это awk

awk 'a[$4==1.1 || $4==10.2]++<10 {print;next} !($4==1.1 || $4==10.2)' file
v1 has output 1.1
v2 has output 10.2
v3 has output 5.4
v4 has output 1.1
v5 has output 10.2
v6 has output 12

Печатает 10 первых строк с 1.1 или 10.2 и всеми другими

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...