J'essaie de supprimer les premier et dernier caractères de chaque ligne dans un fichier texte et d'enregistrer la version tronquée résultante dans un nouveau fichier. Quelqu'un at-il une idée sur la façon de le faire efficacement en utilisant awk
ou d'autres programmes / commandes Linux spécifiquement pour les gros fichiers?
input.txt
(s,2,4,5,6)
"s,1,5,5,2"
{z,0,4,5,3}
[y,2,4,5,5]
(y,4,4,5,7)
(r,20,4,5,7)
(e,9,4,5,2)
Sortie attendue.txt
s,2,4,5,6
s,1,5,5,2
z,0,4,5,3
y,2,4,5,5
y,4,4,5,79
r,20,4,5,7
e,9,4,5,2
text-processing
sed
awk
pacodelumberg
la source
la source
ssed
ou le Heirloom toolchestsed
peut obtenir de meilleures performances.sed
Selon votre question, supprimez le dernier et le premier mot du fichier d'entrée comme ci-dessous:
la source
s/.\(.*\).$/\1/
. Cela pourrait être plus rapide du fait de ne pas utiliser de références arrières, et la question mentionnait des "fichiers volumineux".time yes | head -n 10000000 | COMMAND >/dev/null
. Je reçoisrev input | cut -c2- | rev | cut -c2-
→ 0.14s,sed 's,.\(.*\).$,\1,'
→ 3.38s;awk '{print substr($0,2,length()-2);}'
→ 3,50 s;sed 's/.$//; s/^.//'
→ 5,09 s.sed 's/.\(.*\)./\1/'
semble être plus rapide quesed 's/^.\(.*\).$/\1/'
(GNU sed à nouveau). De plus, les performances dépendent des paramètres régionaux (interprétation de ce qu'est un personnage) et de l'sed
implémentation (à cet égard, sed du heirloom toolchest est considérablement plus rapide que GNU sed).Il existe de nombreuses possibilités, comme toujours
Explication
,
- le délimiteur sed, peut également être tout autre caractère, étant donné qu'il est échappé là où il le faut..
Correspond à un seul caractère\(.*\)
- Regroupez la partie restante et celle-ci est stockée pour être récupérée ultérieurement..
Faites correspondre à nouveau un seul caractère$
- Fin de ligne\1
- afficher le texte correspondant au groupe ci-dessusg
remplacer globalement sur la ligne.la source
g
? il n'y aura qu'un seul match par ligne.Vous pouvez également le faire avec
awk
si vous préférezla source
Cela devrait également fonctionner. Il "traduit" bien chacun des caractères en rien (supprimer).
L'inconvénient est qu'il les supprimera s'ils ne sont pas également le premier / dernier caractère. Il vous manquera également tous les caractères de fin que vous n’indiquez pas dans le
()[...
.la source