Заменить первый столбец в файле

У меня есть следующий файл.

101; John Bauer;      811-7780831;
102; Anthony Higgins; 844-4317627; 
102; Anthony Higgins; 844-4317627;
103; Arnold Sipes;    866-4343123;
104; Donald Quinn;    877-2828732;
105; Roy Jaeger;      551-2323001;
105; Roy Jaeger;      551-2323001;
105; Roy Jaeger;      551-2323001;

Я пытаюсь использовать sed, чтобы заменить первый столбец файла значениями автоматического увеличения, начиная с одного. Конечный результат должен быть примерно таким.

1; John Bauer;      811-7780831;
2; Anthony Higgins; 844-4317627; 
2; Anthony Higgins; 844-4317627;
3; Arnold Sipes;    866-4343123;
4; Donald Quinn;    877-2828732;
5; Roy Jaeger;      551-2323001;
5; Roy Jaeger;      551-2323001;
5; Roy Jaeger;      551-2323001;

Если первое значение первого столбца повторяется, оно должно назначать одно и то же значение, следовательно, повторяющиеся значения в «выходном» файле.

Возможно ли это?

1
задан 4 February 2016 в 22:18

1 ответ

Ваш шаблон в основном «делает первый столбец равным значению - 100». AWK подходит для этого

$ awk -F';' 'BEGIN{OFS=";"}{$1=$1-100;print }' personList.txt  
1; John Bauer;      811-7780831;
2; Anthony Higgins; 844-4317627; 
2; Anthony Higgins; 844-4317627;
3; Arnold Sipes;    866-4343123;
4; Donald Quinn;    877-2828732;
5; Roy Jaeger;      551-2323001;
5; Roy Jaeger;      551-2323001;
5; Roy Jaeger;      551-2323001;

Нет редактирования inplace, поэтому перенаправляйте вывод в новый файл.

$ awk -F';' 'BEGIN{OFS=";"}{$1=$1-100;print }' personList.txt  | tee newFile.txt
1; John Bauer;      811-7780831;
2; Anthony Higgins; 844-4317627; 
2; Anthony Higgins; 844-4317627;
3; Arnold Sipes;    866-4343123;
4; Donald Quinn;    877-2828732;
5; Roy Jaeger;      551-2323001;
5; Roy Jaeger;      551-2323001;
5; Roy Jaeger;      551-2323001;

Чтобы ответить на то, что вы задали в комментариях (создание поля # 4 «Недоступно», если оно пустое), вы можете проверить на 4 символа цифры класса, используя оператор if и regex

$ awk -F';' 'BEGIN{OFS=";"}{$1=$1-100; if ($4 !~ /[[:digit:]]{4}/) $4=" N/A"  ;print }' personList.txt 

1; John Bauer;      811-7780831; 1001;
2; Anthony Higgins; 844-4317627; N/A;
2; Anthony Higgins; 844-4317627; N/A;
3; Arnold Sipes;    866-4343123; N/A;
4; Donald Quinn;    877-2828732; N/A;
5; Roy Jaeger;      551-2323001; 1267;
5; Roy Jaeger;      551-2323001; 1273;
5; Roy Jaeger;      551-2323001; 1204;

. Или вы можете сделать что-то подобное с помощью инструкции

[ f4]
2
ответ дан 23 May 2018 в 13:46
  • 1
    Большое спасибо Сергу! Что, если бы у меня была другая колонка, а в случаях значение NULL. Как я мог вставить что-то там, если значение было NULL. – gm_will 4 February 2016 в 22:00
  • 2
    Не могли бы вы разместить пример для paste.ubuntu.com? – Sergiy Kolodyazhnyy 4 February 2016 в 22:01
  • 3
    Вероятнее всего. Здесь paste.ubuntu.com/14880040 – gm_will 4 February 2016 в 22:05
  • 4
    Готово. См. Мое редактирование – Sergiy Kolodyazhnyy 4 February 2016 в 22:14
  • 5
    Спасибо Сергу. Код, который вы вставили, заменяет все, даже если есть значение. Что еще я могу попробовать? еще раз спасибо – gm_will 4 February 2016 в 22:20

Другие вопросы по тегам:

Похожие вопросы: