AWK, как удалить дубликаты в поле, за исключением некоторых конкретных строк - PullRequest
1 голос
/ 09 декабря 2010

Это структура моего CSV-файла:

Oslo        Company1           Mission1
Oslo        Company1           Mission2 
Oslo        Company3           Missionspecial 
Oslo        Companyspecial     Missionspecial
Paris       Company2           Mission1
Paris       Companyspecial     Mission2 
Paris       Company3           Missionspecial

Я хочу удалить все дубликаты в полях 1,2,3 и заменить их пробелами, за исключением тех специальных строк "Companyspecial" "Missionspecial", чтобы вывод:

Oslo        Company1             Mission1
                                 Mission2
            Company3             Missionspecial
            Companyspecial       Missionspecial
Paris       Company2             
            Companyspecial       
                                 Missionspecial

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

x[$1]++ {$1=""}x[$2]++ {$2=""}x[$3]++ {$3=""}){print $1,$2,$3,et.....}

Я не программист. Помощь будет принята с благодарностью, сэкономит часы глупой рабской работы! Большое спасибо заранее! ``

1 Ответ

2 голосов
/ 09 декабря 2010
awk '{
  for(i=1;i<=3;i++)
    if($i !~ /(Mission|Company)special/)
      if(a[i,$i]++)
        $i=""
  printf("%-12s%-19s%-s\n",$1,$2,$3)
}'

Подтверждение концепции ЗДЕСЬ

Редактировать

Обновлен код, отражающий опасения относительно текста одного поля, потенциально удаляющего другое.Я выполняю это, изменяя a[$i]++ на a[i,$i]++, чтобы текст каждого поля также был привязан к номеру поля.

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