Как заменить строки символами от X до Y - PullRequest
0 голосов
/ 24 февраля 2019

У меня есть данные, подобные следующим:

2496,8805,1/7/19 18:58,9723308800
7,18538320322,1/7/19 19:22,13012881250
8827,9723308808,1/7/19 19:55,9723308800
3109,8801,1/7/19 19:56,19723308800

Я ищу способ заменить строки в поле 2. Если число не имеет 10-11 символов, я хотел бы заменить егос 12223334444, таким образом, результат будет:

2496,12223334444,1/7/19 18:58,9723308800
7,18538320322,1/7/19 19:22,13012881250
8827,9723308808,1/7/19 19:55,9723308800
3109,12223334444,1/7/19 19:56,19723308800

Моя первоначальная мысль заключалась в том, чтобы использовать cut, чтобы получить второе поле, а затем использовать grep "[1-9]" или что-то подобное, чтобы соответствовать 9 символам или меньше.Тем не менее, я уверен, что есть более эффективный способ сделать это, используя sed или awk.Любое руководство будет высоко ценится.

Ответы [ 3 ]

0 голосов
/ 24 февраля 2019

Это может работать для вас (GNU sed):

sed -E '/^[^,]*,[^,]{10,11},/!s/[^,]*/12223334444/2' file

Если второе поле, ограниченное ,, не содержит 10 или 11 символов, замените поле на 12223334444.

0 голосов
/ 24 февраля 2019

еще awk

$ awk 'BEGIN{FS=OFS=","} (s=length($2))!=10 && s!=11{$2=12223334444}1' file

или

$ awk 'BEGIN{FS=OFS=","} (s=length($2))<10 || s>11{$2=12223334444}1' file

можно играть в гольф дальше

$ awk 'BEGIN{FS=OFS=","} $2!~/^.{10,11}$/{$2=12223334444}1' file
0 голосов
/ 24 февраля 2019
awk 'BEGIN{FS=OFS=","} $2<1000000000 || $2>99999999999 {$2=12223334444} {print}' file

или короче:

awk 'BEGIN{FS=OFS=","} $2<1000000000 || $2>99999999999 {$2=12223334444}1' file

или

awk 'BEGIN{FS=OFS=","} length($2)<10 || length($2)>11 {$2=12223334444}1' file

или

awk 'BEGIN{FS=OFS=","} {l=length($2)} l<10 || l>11 {$2=12223334444}1' file

или

awk -F, -v OFS=, '{l=length($2)} l<10 || l>11 {$2=12223334444}1' file

Выход:

2496 12223334444 1/7/19 18:58 9723308800
7,18538320322,1/7/19 19:22,13012881250
8827,9723308808,1/7/19 19:55,9723308800
3109 12223334444 1/7/19 19:56 19723308800

См .: 8 Мощные встроенные переменные Awk - FS, OFS, RS, ORS, NR, NF, FILENAME, FNR

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