AWK разбить файл на шаблон и назвать новые файлы после строки в первой строке после шаблона

Рассмотрим этот файл:

#!/usr/bin/env bash
cat > example_file.txt <<EOL
sdk,jalxa,9325
m,head1,3
ae,wea,2232
ax1,awq,2321
m,head1,32
dgf,12a,8923
m,head1,11
bsda,awq,902
9as,wea,1732
ax1,awq,2321
EOL

Я хотел бы разбить его на строку, начиная с m,head1,. Таким образом, результатом будет:

file_wea.txt:

m,head1,3
ae,wea,2232
ax1,awq,2321

file_12a.txt:

m,head1,32
dgf,12a,8923

file_awq.txt:

m,head1,11
bsda,awq,902
9as,wea,1732
ax1,awq,2321

например Файлы, полученные в результате разделения, должны быть названы после записи во втором столбце (через запятую) первой строки после шаблона разделения. Я борюсь с этой частью (как ссылаться на следующую строку в AWK?)

1
задан 23 September 2019 в 14:57

1 ответ

Можно считать в следующей строке в awk использование иллюстрация getline

Quick'n'dirty (необходимо действительно проверить ее возвращаемое значение и действовать соответственно):

awk -F, '
  /^m,head/ {
    tmp = [110]; getline; outfile = "file_" $2 ".txt"; print tmp > outfile
  } 
  outfile != "" {
    print > outfile
  }
' example_file.txt

предоставление

$ head file_*.txt
==> file_12a.txt <==
m,head1,32
dgf,12a,8923

==> file_awq.txt <==
m,head1,11
bsda,awq,902
9as,wea,1732
ax1,awq,2321

==> file_wea.txt <==
m,head1,3
ae,wea,2232
ax1,awq,2321

, Если имена файлов не уникальны, Вы, вероятно, захотите добавить (>>), а не усеченный (>).

<час>

, Если Вы хотите к gzip блоки, затем вместо того, чтобы создать файлы простого текста и затем выполниться gzip через system вызов, можно распечатать данные через стандартный вход к gzip следующим образом - заботящийся это Вы Заключительные Входные и выходные Перенаправления

awk -F, '
  /^m,head/ {
    close("gzip >" outfile); 
    tmp = [112]; getline; outfile = "file_" $2 ".txt.gz"; print tmp | "gzip >" outfile
  } 
  outfile != "" {
    print | "gzip >" outfile
  } 
  END {
    close("gzip >" outfile)
  }
' example_file.txt
2
ответ дан 10 November 2019 в 10:03

Другие вопросы по тегам:

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