Как использовать awk для печати всех полей, кроме указанного c поля? - PullRequest
0 голосов
/ 03 февраля 2020

У меня есть файл из 100000 строк, разделенных ^ M. Ниже приведены первые 4 ряда. Я хочу удалить 35 = [и т. Д.] Из каждой четной строки в файле из 100К строк

{1=0200, 62=01000000000000000000000000000000000000000000000000000000000000001000001000001, 63=1000000000000000000000000002, 38=000001, 11=000001, 12=125216, 13=0213, 15=0213, 18=6011, 19=840, 2=4511230100604088, 22=9000, 25=00, 3=010000, 32=12345678901, 35=2302127162,  37=500001000001,  4=000000000300, 41=123ac130, 42=USA STORE000001, 43=SAFEWAY STORE #970       SAN MATEO    US, 49=0840, 52=7B7AD380360E5C66,  59=0600094044, 60=123456789000, 7=1103145214}^M
{1=0200, 62=01000000000000000000000000000000000000000000000000000000000000001000001000002, 63=1000000000000000000000000002, 38=000002, 11=000002, 12=125216, 13=0213, 15=0213, 18=6011, 19=840, 2=4511230100604286, 22=9000, 25=00, 3=010000, 32=12345678901, 35=2302127328,  37=500001000002,  4=000000000300, 41=123ac130, 42=USA STORE000001, 43=SAFEWAY STORE #970       SAN MATEO    US, 49=0840, 52=F55C5F27C8A91F31,  59=0600094044, 60=123456789000, 7=1103145214}^M
{1=0200, 62=01000000000000000000000000000000000000000000000000000000000000001000001000003, 63=1000000000000000000000000002, 38=000003, 11=000003, 12=125216, 13=0213, 15=0213, 18=6011, 19=840, 2=4511230100604997, 22=9000, 25=00, 3=010000, 32=12345678901, 35=2302127295,  37=500001000003,  4=000000000300, 41=123ac130, 42=USA STORE000001, 43=SAFEWAY STORE #970       SAN MATEO    US, 49=0840, 52=CC3803D589D05384,  59=0600094044, 60=123456789000, 7=1103145214}^M
{1=0200, 62=01000000000000000000000000000000000000000000000000000000000000001000001000004, 63=1000000000000000000000000002, 38=000004, 11=000004, 12=125216, 13=0213, 15=0213, 18=6011, 19=840, 2=4511230100605333, 22=9000, 25=00, 3=010000, 32=12345678901, 35=2302127558,  37=500001000004,  4=000000000300, 41=123ac130, 42=USA STORE000001, 43=SAFEWAY STORE #970       SAN MATEO    US, 49=0840, 52=D9FB6238A83D8FDD,  59=0600094044, 60=123456789000, 7=1103145214}^M

Вывод должен выглядеть как

{1=0200, 62=01000000000000000000000000000000000000000000000000000000000000001000001000001, 63=1000000000000000000000000002, 38=000001, 11=000001, 12=125216, 13=0213, 15=0213, 18=6011, 19=840, 2=4511230100604088, 22=9000, 25=00, 3=010000, 32=12345678901, 35=2302127162,  37=500001000001,  4=000000000300, 41=123ac130, 42=USA STORE000001, 43=SAFEWAY STORE #970       SAN MATEO    US, 49=0840, 52=7B7AD380360E5C66,  59=0600094044, 60=123456789000, 7=1103145214}^M
{1=0200, 62=01000000000000000000000000000000000000000000000000000000000000001000001000002, 63=1000000000000000000000000002, 38=000002, 11=000002, 12=125216, 13=0213, 15=0213, 18=6011, 19=840, 2=4511230100604286, 22=9000, 25=00, 3=010000, 32=12345678901, 37=500001000002,  4=000000000300, 41=123ac130, 42=USA STORE000001, 43=SAFEWAY STORE #970       SAN MATEO    US, 49=0840, 52=F55C5F27C8A91F31,  59=0600094044, 60=123456789000, 7=1103145214}^M
{1=0200, 62=01000000000000000000000000000000000000000000000000000000000000001000001000003, 63=1000000000000000000000000002, 38=000003, 11=000003, 12=125216, 13=0213, 15=0213, 18=6011, 19=840, 2=4511230100604997, 22=9000, 25=00, 3=010000, 32=12345678901, 35=2302127295,  37=500001000003,  4=000000000300, 41=123ac130, 42=USA STORE000001, 43=SAFEWAY STORE #970       SAN MATEO    US, 49=0840, 52=CC3803D589D05384,  59=0600094044, 60=123456789000, 7=1103145214}^M
{1=0200, 62=01000000000000000000000000000000000000000000000000000000000000001000001000004, 63=1000000000000000000000000002, 38=000004, 11=000004, 12=125216, 13=0213, 15=0213, 18=6011, 19=840, 2=4511230100605333, 22=9000, 25=00, 3=010000, 32=12345678901, 37=500001000004,  4=000000000300, 41=123ac130, 42=USA STORE000001, 43=SAFEWAY STORE #970       SAN MATEO    US, 49=0840, 52=D9FB6238A83D8FDD,  59=0600094044, 60=123456789000, 7=1103145214}^M

Ответы [ 2 ]

0 голосов
/ 11 февраля 2020

Не уверен, что 62 = [цифры] или 11 = [цифры] являются надежными счетчиками строк. Но если они есть, может быть, что-то подобное в Vim?

g/\v11\=\d+[0248],/s/\v, 35\=\d{10}//

Фильтрует по 11 = [цифры] для четных чисел

g/\v62\=\d+[0248],/s/\v, 35\=\d{10}//

Фильтрует по 62 = [цифры] для четных чисел

0 голосов
/ 03 февраля 2020

Это возможно с помощью команды g в vim:

:g/35=[0-9]*, */ if getcurpos()[1] % 2 == 0 | s///g | endif

В основном мы делаем:

  1. Команда g ищет каждую строку, которая имеет соответствует регулярному выражению 35=[0-9]*, *, а затем выполняет команды, следующие за ним (в данном случае, оператор if).
  2. Проверьте, совпадает ли позиция курсора с if getcurpos()[1] % 2 == 0.
  3. Если оно четное, замените его пустой строкой s///g.

Подробнее о силе команды g здесь: https://vim.fandom.com/wiki/Power_of_g

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