Скрипт для извлечения уникальных значений в каждой строке большого файла - PullRequest
0 голосов
/ 05 ноября 2019

У меня есть большой CSV-файл, похожий на этот:

222,333,222,333,444
777,333,222,555,777
...

Мне нужно сделать так, чтобы дубликаты в каждой строке удалялись:

222,333,444
777,333,222,555

Я написал этот кусокскрипт для цели:

for line in `cat a.txt`; do echo $line | tr ',' '\n' | sort | uniq | tr '\n' ','  ; echo ; done

Это работает, но я думаю, что есть более простой способ.

Есть ли способ добиться этого с помощью командной строки (в Unix) без необходимости писать цикл в скрипте? Любая помощь будет высоко оценена.

1 Ответ

0 голосов
/ 05 ноября 2019

Не могли бы вы попробовать, учитывая, что в ваших данных нет ,.

awk '
BEGIN{
  FS=OFS=","
}
{
  for(i=1;i<=NF;i++){
    if(++a[$i]>1){
      $i=""
    }
  }
  gsub(/,,/,",")
  gsub(/,+$/,"")
  gsub(/,,/,",")
  delete a
}
1
'  Input_file

Вывод будет следующим.

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