在分隔符处拆分文件,在每个分隔符后为内容添加文件扩展名
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.txt
、example.1.txt
和 example.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"
我在 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.txt
、example.1.txt
和 example.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"