Je cherche un script bash ou sed (de préférence un one-liner) avec lequel je peux insérer un nouveau caractère après un nombre fixe de caractères dans un fichier texte énorme.
Que diriez-vous quelque chose comme ça? Change 20 est le nombre de caractères avant la nouvelle ligne et temp.text est le fichier à remplacer dans ..
sed -e "s/.\{20\}/&\n/g" < temp.txt
Voici la solution POSIX:
awk '{gsub(/.{5}/,"&\n")}1' file
Ou:
fold -w5 file
Contribution:
banana strawberry grape
Sortie:
banan
a str
awber
ry gr
ape
Fait intéressant, la solution Awk est plus performante que fold.
Soit N une variable Shell représentant le nombre de caractères après lequel vous souhaitez une nouvelle ligne. Si vous souhaitez continuer le compte sur plusieurs lignes:
Perl -0xff -pe 's/(.{'$N'})/$1\n/sg' input
Si vous souhaitez redémarrer le compte pour chaque ligne, omettez l'argument -0xff.
Ajouter une ligne vide après une ligne avec exactement 42 caractères
sed -ie '/^.\{42\}$/a\
' huge_text_file
si vous voulez dire que vous voulez insérer votre nouvelle ligne après un certain nombre de caractères par rapport au fichier entier, par exemple après le 30ème caractère du fichier entier
gawk 'BEGIN{ FS=""; ch=30}
{
for(i=1;i<=NF;i++){
c+=1
if (c==ch){
print ""
c=0
}else{
printf $i
}
}
print ""
}' file
si vous voulez dire insérer un nombre spécifique de caractères dans chaque ligne, par exemple après chaque cinquième caractère
gawk 'BEGIN{ FS=""; ch=5}
{
print substr($0,1,ch) "\n" substr($0,ch)
}' file
Cela pourrait fonctionner pour vous:
echo aaaaaaaaaaaaaaaaaaaax | sed 's/./&\n/20'
aaaaaaaaaaaaaaaaaaaa
x