patsplit vs split в gawk

Вы можете использовать Vim в режиме Ex:

ex -sc '%s/\v(.*\n){2}/> &/|x' file
  1. % выбрать все строки

  2. s заменить

  3. \ v включить магию

  4. x сохранить и закрыть

1
18.07.2017, 19:18
2 ответа

splitсоответствует разделению полей по умолчанию, используяFS(или специальное регулярное выражение, если оно указано ):оно использует регулярное выражение для сопоставления разделителей полей . Если вы укажете FS=,, то поля будут разделены разделяющими запятыми — сами запятые не окажутся в содержимом поля, они окажутся в массиве разделителей (, если указано ).

patsplitсоответствует разделению шаблона поля, которое можно использовать вместо разделения поля по умолчанию, указав значение дляFPAT:он использует регулярное выражение для соответствия содержимому поля . Например, если вас интересуют только числа, указанные в какой-либо записи, вы можете указать FPAT="[[:digit:].]+"или использовать patsplitс этим регулярным выражением, чтобы сопоставить все непрерывные наборы цифр и манипулировать ими как полями.

2
28.04.2021, 23:58

В splitвы указываете разделитель; тогда как в patsplitвы сопоставляете шаблон между разделителями:

$ echo 'foo,bar' | awk '{n = split($0,a,/,/); for(i=1;i<=n;i++) print a[i]}'
foo
bar

тогда как

$ echo 'foo,bar' | awk '{n = patsplit($0,a,/[^,]*/); for(i=1;i<=n;i++) print a[i]}'
foo
bar
4
28.04.2021, 23:58

Теги

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