Unix, как отфильтровать текстовый файл, чтобы найти дубликаты в части строки от 1 до 49 символов и сохранить только один - PullRequest
0 голосов
/ 15 апреля 2019

Я должен отфильтровать много строк данных и найти дубликаты в позиции 1-49 символов.Следующий первый дубликат остается там, а дубликаты удаляются.Скрипт должен быть в скрипте оболочки.Я читал о сортировке, uniq, но не смог найти правильный пример.

Дублированные строки от 1 до 49 символов должны быть удалены и сохранены только первыми.В примере строки: ALA1FZX 00013019040220180402SFOSINSFOSIN78Z78Z24 дублируется 4 раза и сохраняется только сначала из строки 1.

У меня есть этот пример строк:

ALA1FZX 00013019040 * 012 10024 * ZZZFF ALA1FZX 00013019040220180402SFOSINSFOSIN78Z78Z215 * +1011 * ALA1FZX 00013019040220180402SFOSINSFOSIN78Z78Z225

*

ALA1FZX 00013019040220180402SFOSINSFOSIN78Z78Z235 1015

ALA1FZX 00013019040220180402SFOSINSFOSIN78Z78Z24 2

1020 ** * ALA1FZX тысяча двадцать один 00013019040220180402SFOSINSFOSIN78Z78Z24 * * тысяча двадцать-два4

ALA1FZX 00013019040220180402SFOSINSFOSIN78Z78Z24 5

Вывод должен быть:

1030 * ALA1FZX 00013019040220180402SFOSINSFOSIN78Z78Z241 1032 * ALA1FZX 00013019040220180402SFOSINSFOSIN78Z78Z215 1034 * ALA1FZX 00013019040220180402SFOSINSFOSIN78Z78Z225

ALA1FZX 00013019040220180402SFOSINSFOSIN78Z78Z235

1 Ответ

1 голос
/ 15 апреля 2019

Если вы не возражаете против того, чтобы ваши данные сортировались первыми, можно использовать комбинацию sort и awk.Из группы совпадающих строк будет напечатана первая строка после сортировки данных, которая не обязательно является первой строкой в ​​исходном файле.

sort inputfile |awk 'BEGIN { last = ""; }
{ pattern = substr($0,1,48); if(pattern != last) print; last = pattern; }'

Примечание: я использовал substr($0,1,48), чтобы получить 48 символов, потому что вВ вашем примере я считаю только 48 жирных символов.

С помощью ввода

ALA1FZX 00013019040220180402SFOSINSFOSIN78Z78Z241
ALA1FZX 00013019040220180402SFOSINSFOSIN78Z78Z215
ALA1FZX 00013019040220180402SFOSINSFOSIN78Z78Z225
ALA1FZX 00013019040220180402SFOSINSFOSIN78Z78Z235
ALA1FZX 00013019040220180402SFOSINSFOSIN78Z78Z242
ALA1FZX 00013019040220180402SFOSINSFOSIN78Z78Z244
ALA1FZX 00013019040220180402SFOSINSFOSIN78Z78Z245

я получаю результат

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