2017-09-26 4 views
1

Je dois ajouter un fichier à un emplacement spécifique d'un autre fichier. Je suis le numéro de ligne, mon fichier est:Ajouter un fichier au milieu d'un autre fichier dans bash

file1.txt 

Je

am

Cookie

Alors que le second est

file2.txt 

un

noir

chien

nommé

donc, après que la solution, file1.txt devrait être comme

Je

am

un

noir

chien

nommé

Cookie

La solution doit être compatible avec la présence de caractères tels que "et/dans les deux fichiers.

Tout outil est ok aussi longtemps qu'il est natif (je veux dire, aucune nouvelle installation du logiciel)

Merci à!

Répondre

2

Pourriez-vous s'il vous plaît essayer de suivre et laissez-moi savoir si cela vous aide.

awk 'FNR==3{system("cat file2.txt")} 1' file1.txt 

La sortie sera la suivante.

I 
am 
a 
black 
dog 
named 
Cookie 

Explication: Vérification ici si le numéro de ligne est 3 en lisant file1.txt INPUT_FILE nommé, si oui, en utilisant alors l'utilité du système de awk qui nous aidera à appeler les commandes de shell, je suis l'impression de la fichier2. txt avec l'utilisation de la commande cat. Puis, en mentionnant 1, toutes les lignes de file1.txt seront imprimées. Ainsi, nous pourrions concaténer des lignes de file2.txt en file1.txt.

+1

cela a fonctionné! Pour comprendre votre réponse ... la traduction est: quand vous arrivez à la ligne 3 cat file2.txt et puis arrêtez? utilisation intéressante du système() .. thnx! –

+0

@WyattGillette, vous êtes les bienvenus. Heureux que cela vous a aidé, je viens d'ajouter des explications de même, veuillez me le faire savoir si vous avez d'autres questions sur le même. – RavinderSingh13

+1

clairement clair, merci encore @ RavinderSingh13 –

1

Une autre option en dehors de ce RavinderSingh13 a suggéré d'utiliser sed: Pour ajouter le texte de file2.txt dans file1.txt après une ligne spécifique:

sed -i '2 r file2.txt' file1.txt 

Sortie:

I 
am 
a 
black 
dog 
named 
Cookie 

à ajouter le fichier après un motif assorti:

sed -i '/^YourPattern/ r file2.txt' file1.txt 
+0

aussi celui-ci a travaillé, j'ai donné la réponse à la première en raison de l'ordre chronologique :) btw, cela signifie: modifier le flux à la ligne 2 en insérant file2.txt dans file1.txt? Ressemble encore plus simple ... –

+0

Moyens ajouter des lignes de fichier2 après la 2ème ligne de fichier1. Il n'invoque pas 'cat' comme dans l'autre réponse. – Ardit

+0

yup était facile avec 'r', comment pourrais-je ne pas y penser –

1

Que diriez-vous

head -2 file1 && cat file2 && tail -1 file1 

Vous pouvez compter le nombre de lignes de paramètres head et décider tail à l'aide fichier1

wc -l file1 
+1

la créativité au travail ici et cela fonctionne, bonne solution de contournement un point est: si le fichier est énorme (par exemple 5000+ lignes) serait un problème pour compter le paramètre queue ... facile à trouver tête un (chat -n et grep) on pourrait faire: fichier tac2> fichier3 && cat -n fichier3 | chien grep pour trouver le paramètre queue, dur ... manière drôle et de travail –