MSDTC через домены и подсеть

Я хотел бы предложить обобщение с awk.

Когда файл создается блоками фиксированного размера, а строки для удаления повторяются для каждого блока, awk может работать нормально таким образом

awk '{nl=((NR-1)%2000)+1; if ( (nl<714) || ((nl>1025)&&(nl<1029)) ) print  $0}'
 OriginFile.dat > MyOutputCuttedFile.dat

В этом примере размер для блока - 2000, и я хочу напечатать строки [1..713] и [1026..1029].

  • NR - это переменная, используемая awk для хранения номер текущей строки.
  • % дает остаток (или модуль) деления двух целых чисел:
  • nl=((NR-1)%BLOCKSIZE)+1 Здесь мы пишем переменную nl номер строки внутри текущего блока. (см. ниже)
  • || и && являются логическим оператором ИЛИ и AND .
  • print $0 записывает полную строку

Why ((NR-1)%BLOCKSIZE)+1:
(NR-1) We need a shift of one because 1%3=1, 2%3=2, but 3%3=0.
  +1   We add again 1 because we want to restore the desired order.

+-----+------+----------+------------+
| NR  | NR%3 | (NR-1)%3 | (NR-1)%3+1 |
+-----+------+----------+------------+
|  1  |  1   |    0     |     1      |
|  2  |  2   |    1     |     2      |
|  3  |  0   |    2     |     3      |
|  4  |  1   |    0     |     1      |
+-----+------+----------+------------+

0
задан Antonio 19 March 2019 в 08:39
поделиться