Команда sed или awk для вставки табуляции (разделителя) в определенные позиции

Поместите нужные шаблоны регулярных выражений в файл и используйте egrep.

Ваш файл (назовем его filter.txt):

srcip=(.*?),
srczone=(.*?),
....

Ваша команда:

grep -Eof filters.txt logfile.txt
1
05.09.2017, 03:49
2 ответа

Использование Awk с двумя проходами:

awk -F'\t' -v OFS='\t' 'FNR==NR {if (NF>a) {a=NF}; next} NF<a{$a=""} 1' file file

Это добавит дополнительные вкладки на конце строк с пропущенными полями.


Основываясь на ваших точных выборочных данных, я думаю, что, вероятно, вы имеете дело с проблемой, которую невозможно решить программно. Если вам нужны дополнительные вкладки в промежуточном положении, чтобы значения no_rank попали в правый столбец, вам понадобится более хитрая логика.

3
27.01.2020, 23:25

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

В этом случае, когда максимальная длина может быть где-то еще, лучшее, что я мог сделать, было:

cat in.dat | mlr --nidx --fs tab --nidx put -q '
  @maxnf = max(@maxnf, NF);
  @records[NR] = $*; # Retain
  @counts[NR] = NF;

  end {
    for (i in @records) {
      @record = @records[i];
      for (j = @counts[i] + 1; j <= @maxnf; j += 1) { # add extra fields
        @record["x".j] = "";
      }
      emit @record;            # insert into the output record stream
    }
  }
'

Идея состоит в том, чтобы сохранить список записей и максимальное значение NF; затем обработайте в конечном блоке. Обратите внимание, что здесь используются функции в голове (не в последней версии 4.5.0).

0
27.01.2020, 23:25

Теги

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