Рассмотрим этот файл:
#!/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?)
Можно считать в следующей строке в 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