Есть ли способ удалить данные из текстового файла после sla sh, как показано ниже? - PullRequest
0 голосов
/ 15 апреля 2020

Я пытаюсь удалить телефонные номера из текстового файла, используя sed и awk до следующей запятой, но мне не повезло.

This ...

2020-04-13 17:09:58.934,/abc/blahblahblahI/v1/dennisritchie/7408058445,2020-04-13 17:09:58.687,2020-04-13 17:09:58.934
2020-04-13 17:09:59.387,/cde/bunnyrabbit/v1/tea/generate/9161455644,2020-04-13 17:09:59.322,2020-04-13 17:09:59.387
2020-04-13 17:09:59.567,/fgh/scoobybites/v1/shaggy/markup/7672748033,2020-04-13 17:09:59.459,2020-04-13 17:09:59.567
2020-04-13 17:09:59.640,/xxx/xxxxxxxxxxxxxx/v1/xxx/generate,2020-04-13 17:09:59.624,2020-04-13 17:09:59.640
2020-04-13 17:09:59.796,/yyyy/defoe/v1/aaaaaaaaaal/9820276621?noOfRecords=1&blahlahAccountNo,2020-04-13 17:09:59.523,2020-04-13 17:09:59.796

Требуется чтобы выглядеть следующим образом

2020-04-13 17:09:58.934,/abc/blahblahblahI/v1/dennisritchie/,2020-04-13 17:09:58.687,2020-04-13 17:09:58.934
2020-04-13 17:09:59.387,/cde/bunnyrabbit/v1/tea/generate/,2020-04-13 17:09:59.322,2020-04-13 17:09:59.387
2020-04-13 17:09:59.567,/fgh/scoobybites/v1/shaggy/markup/,2020-04-13 17:09:59.459,2020-04-13 17:09:59.567
2020-04-13 17:09:59.640,/xxx/xxxxxxxxxxxxxx/v1/xxx/generate,2020-04-13 17:09:59.624,2020-04-13 17:09:59.640
2020-04-13 17:09:59.796,/yyyy/defoe/v1/aaaaaaaaaal/,2020-04-13 17:09:59.523,2020-04-13 17:09:59.796

Обратите внимание, мне нужны данные, начиная с номера телефона и заканчивая следующей запятой, как в последней строке.

Любая помощь приветствуется.

Спасибо за решения, с которыми они работают на всех линиях, кроме тех, которые выглядят как показано ниже. Не могли бы вы помочь

/ dcd / manual / v2 / profile / 9841001122? Fields = billingArrangement, billingAccountNo, faId, 2020-04-16 09: 59: 59.740,2020-04-16 09: 59: 59.825

после запуска команды она выдает следующие выходные данные

/ dcd / manual / v2 / profile, billingAccountNo, faId, 2020-04-16 09: 59: 59.740,2020-04-16 09: 59: 59.825

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

/ dcd / manual / v2 / profile, 2020-04-16 09: 59: 59.740,2020-04-16 09: 59: 59.825

Ответы [ 2 ]

2 голосов
/ 15 апреля 2020

Вы можете сделать это в одной строке, как показано ниже.

awk 'BEGIN{FS=OFS=","} {sub(/[0-9]{10}.*/,"",$2)} 1'  Input_file

РЕДАКТИРОВАТЬ: В соответствии с комментарием @kvantour для обработки углового случая попробуйте следующее.

awk '
{
  val=""
  num=split($2,array,"/")
  sub(/[0-9]{10}.*,/,",",array[num])
  for(i=1;i<=num;i++){
    val=(val?val"/":"")array[i]
  }
  $2=val
}
1
'  Input_file
1 голос
/ 15 апреля 2020

возможно это

cat data.txt \
  | sed -r 's/(.*)\/[[:digit:]]+,(.*)/\1,\2/g' \
  | sed -r 's/(.*)\/[[:digit:]]+\?[^,]*,(.*)/\1,\2/g'

Вторая замена - потому что я заметил, что последняя строка в вашем примере отличается от других

Будьте осторожны, если у вас есть другие особые случаи в вашем полном набор данных вам нужно заботиться о них аналогичным образом

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