J'ai un énorme fichier texte brut (~ 500 Go) sur la machine Linux. Je veux le remplacer une chaîne dans la ligne d'en-tête (la première ligne du fichier), mais toute la méthode que je connais semble être lente et faible efficacité.Le moyen le plus rapide de remplacer la chaîne dans la première ligne de l'énorme fichier dans la ligne de commande linux?
exemple de fichier:
foo apple cat
1 2 2
2 3 4
3 4 6
...
sortie fichier attendu:
bar apple cat
1 2 2
2 3 4
3 4 6
...
sed:
sed -i '1s/foo/bar/g' file
-i
can c changer le fichier en place, mais cette commande génère un fichier tmp sur le disque et utilise le fichier tmp pour remplacer le fichier original. Le temps perdu.
vim:
ex -c '1s/foo/bar/g' -c 'wq' file
vim ne génère pas un fichier tmp, mais cet outil charger tout le fichier dans la mémoire, ce qui gaspille beaucoup de temps non plus.
Y a-t-il une meilleure solution qui lit uniquement la première ligne en mémoire et l'écrit dans le fichier d'origine? Je savais que la commande linux head
peut extraire la première colonne très rapidement.
Veuillez ajouter l'entrée d'échantillon et la sortie désirée pour cet exemple d'entrée à votre question. – Cyrus
Cela ne peut être fait que si 'foo' et' bar' ont la même longueur (en octets). Sinon, réécrire le fichier entier est votre seule option (bien que cela puisse être fait sur place si l'outil est assez intelligent). – Thomas
@cyrus J'avais ajouté l'exemple. –