Удалить повторы в текстовом файле с помощью awk - PullRequest
0 голосов
/ 09 января 2020

У меня есть фрагмент текстового файла (этот текстовый файл огромен):

114303 SOL1443
114311 SOL679
114316 SOL679
114432 SOL1156
114561 SOL122
114574 SOL2000
114952 SOL3018
115597 SOL609
115864 SOL2385
115993 SOL3448
SOL2 61571
SOL3 87990
SOL4 96242
SOL5 6329
SOL5 16550
SOL9 84894
SOL9 84911
SOL12 91985
SOL15 85816

Мне нужно написать скрипт, который будет удалять строки с одинаковым номером SOLnumber. Не имеет значения, находится ли SOL в первом или во втором столбце. Например, в тексте у меня есть

115993 SOL269
SOL269 84911
12373 SOL269

Так что мой скрипт удалит вторую и третью строку

SOL269 84911
12373 SOL269

Я знаю, что в awk я могу использовать

awk '!seen[$0]++' data.txt

для удаления повторяющихся строк, но он удаляет строки, содержащие одинаковые слова в каждом столбце. Пожалуйста, помогите мне!

Ответы [ 3 ]

1 голос
/ 09 января 2020

Вам необходимо извлечь значение SOL и сгруппировать содержимое файла на его основе. Приведенная ниже команда использует функцию regex match() для сопоставления в текущей строке, содержащей шаблон SOL, за которой следует di git, и сохраняет захваченную группу в переменной sol.

Теперь со значением в переменной используйте logi c !unique[sol]++, чтобы перечислить только строки, содержащие образец, один раз.

awk 'match($0, /SOL[[:digit:]]+/){ sol = substr($0, RSTART, RLENGTH);  } !unique[sol]++' 

Не говоря, perl лучше чем выше, но вы можете сделать

perl -ne '/(SOL\d+)/; print unless $unique{$1}++' file
0 голосов
/ 09 января 2020

Вы можете сделать то же самое, что и ваша команда awk (просто выполните некоторую предварительную обработку, чтобы выбрать столбец для использования в видимом массиве:

awk '{if($1 ~ /^SOL/){sol_kw=$1}else{sol_kw=$2}}!seen[sol_kw]++' <file>
0 голосов
/ 09 января 2020

Поскольку ваше поле SOL не всегда находится в одном и том же месте, сначала вы должны его найти.

awk '{
end=substr($0, index("SOL", $0))
sol=substr(end, 0, index(" ", end))
}
!seen[sol]++
' data.txt
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...