如何在文件中的固定数量的字符后插入新的行字符

时间:2009-07-27 08:34:39

标签: bash sed

我正在寻找一个bash或sed脚本(最好是一行代码),我可以在巨大的文本文件中使用固定数量的字符后插入一个新行字符。

7 个答案:

答案 0 :(得分:41)

这样的事情怎么样?更改20是换行符之前的字符数,temp.text是要替换的文件。

sed -e "s/.\{20\}/&\n/g" < temp.txt

答案 1 :(得分:34)

这是POSIX解决方案:

awk '{gsub(/.{5}/,"&\n")}1' file

或者:

fold -w5 file

输入:

banana strawberry grape

输出:

banan
a str
awber
ry gr
ape

有趣的是,Awk解决方案比折叠更具性能。

答案 2 :(得分:2)

设N是一个shell变量,表示您想要换行符后的字符数。如果你想继续计数:

perl -0xff -pe 's/(.{'$N'})/$1\n/sg' input

如果要重新开始每行的计数,请省略-0xff参数。

答案 3 :(得分:1)

因为我无法直接评论(声望降低)对上层评论的新提示:

我更喜欢 sed 命令(正是我想要的),并且还测试了Posix-Command fold 。但是,对于原始问题,这两个命令之间存在一些差异: 如果您有一个带有n * bytes记录的平面文件(不包含任何换行符),并使用 sed 命令(以bytes作为数字(@Kristian的答案为20)),则您将获得n行用 wc 进行计数。如果使用 fold 命令,则只有 wc 出现n-1行! 这种差异有时很重要,要知道,如果您的输入文件中不包含任何换行符,则您在最后一行之后加上 sed 就得到一个换行符,而没有得到 fold < / p>

答案 4 :(得分:0)

如果您的意思是想在相对于整个文件的多个字符之后插入换行符,例如在整个文件中的第30个字符之后

gawk 'BEGIN{ FS=""; ch=30}
{
    for(i=1;i<=NF;i++){
        c+=1
        if (c==ch){
            print "" 
            c=0           
        }else{
            printf $i
        }
    }
    print ""
}' file

如果您的意思是插入每行中特定数量的字符,例如每隔5个字符后插入

gawk 'BEGIN{ FS=""; ch=5}
{
    print substr($0,1,ch) "\n" substr($0,ch)
}' file

答案 5 :(得分:0)

在一行恰好包含42个字符

之后添加一个空行
sed -ie '/^.\{42\}$/a\
' huge_text_file

答案 6 :(得分:0)

这可能对您有用:

echo aaaaaaaaaaaaaaaaaaaax | sed 's/./&\n/20'
aaaaaaaaaaaaaaaaaaaa
x