Используйте awk для замены одного значения столбца другим значением столбца, если первая буква не является буквой алфавита - PullRequest
1 голос
/ 28 сентября 2019

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

ID                Name          Gender        NID
Y12               Jim              M          C12
Y23               David            M          C23
234               Bob              M          C22
2b1               Lucy             F          C24
2bb               Lily             F          C25

Я хочу заменить значение столбца ID значением NID, если первая буква в ID не является буквой алфавита.Таким образом, ожидается, что результат будет

ID                Name          Gender        NID
Y12               Jim              M          C12
Y23               David            M          C23
C22               Bob              M          C22
C24               Lucy             F          C24
C25               Lily             F          C25

Это всего лишь пример.Мой исходный размер данных намного больше, поэтому я должен использовать awk.Ключевой вопрос заключается в том, как указать условие.Мне не понятно, как с этим бороться.Код, о котором я думал, похож на awk -F, 'if $1 != ..., $1=$4'.Я также погуглил, но не смог найти подходящего решения.Вот ссылка, которая, я думаю, может быть полезна. Фильтровать строки, содержащие только алфавиты в первом столбце .Спасибо.

Ответы [ 2 ]

1 голос
/ 28 сентября 2019

Используйте регулярное выражение.

awk '$1 ~ /^[^A-Z]/ { $1 = $4 }1' filename

DEMO

0 голосов
/ 28 сентября 2019

Если вы можете рассчитывать, что столбец ID всегда будет 3 символами, это сохранит форматирование таблицы:

awk '{ sub("^[^[:alpha:]]..", $4) } 1' file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...