我在 bash 中有一些简单的文本文件,看起来像这样
>Position 1
ABCD
EFGH
IJKL
MNOP
QRST
UVWX
YZ
>Position 2
abcd
efgh
ijkl
mnop
qrst
uvwx
yz
>Position 3
...
(字母和大小写仅用作示例)
我想要的是能够提取“标题”(>位置)之间的每个部分(AZ)并将它们分成长度为 n 的字符串以发送到文件。例如,如果 n=10 我的输出应该是
ABCDEFGHIJ
KLMNOPQRST
UVWXYZ
abcdefghij
klmnopqrst
uvwxyz
我需要在一个接近一百万行的非常大的文件上执行此操作,因此效率是关键。
我当前的方法不是很有效,如下所示:
cat file.txt | while read line; do
if [[ "$line" != '>'* ]]; then
section="$section$line"
else
echo $section | fold -w 10 >> fragments.txt
section=''
fi
done
总之,它构建每个“部分”,直到到达新的“>”标头,此时它会吐出碎片内容。
如果可能的话,我想要一些能够更有效地给出相同结果的东西。有任何想法吗?
另一个 awk:
输出给定数据和
n=10
:我会使用纯awk解决方案做什么:
相同的多行: