在分隔符处拆分文件,在每个分隔符后为内容添加文件扩展名

split file at delimiters, with file extension for content after each delimiter

我在 example.txt 中有这样的数据:

line 1
line 2
delimA
line 3
line 4
delimB
line 5
line 6

我想以三个不同的文件结束:

example.txt:

line 1
line 2

example.a.txt

line 3
line 4

example.b.txt

line 5
line 6

我可以想出几种方法来使用长自定义脚本来执行此操作,但我想知道是否有任何 bash 实用程序可以大大简化此操作。

使用 awk 你可以做这样的事情:

awk '/^delim/{f=tolower(substr([=10=],length([=10=]),1));next}{print > ("example"(f?"."f:"")".txt")}' file

Bash解决方案。结果是文件 example.0.txtexample.1.txtexample.2.txt

number=0                                # output file number
output="example.${number}.txt"          # 1. output file name
> "$output"                             # empty output file

while read line ; do
  if [[ $line =~ ^delim ]] ; then       # delimiter at begin of line ?
    output="example.$((++number)).txt"  # next output file
    > "$output"                         # empty output file
  else
    echo "$line" >> "$output"
  fi
done < "$input"