3
votes

Ajouter la date de la première ligne du fichier texte au début de chaque autre ligne

J'essaie d'ajouter la première ligne de texte (la date) au début de chaque ligne dans le reste du fichier texte. Quelqu'un peut-il aider? J'utilise un bash pour extraire les données dans le fichier texte affiché. (complètement nouveau dans ce domaine)

Fichier texte comme indiqué ci-dessus

Fichier texte actuel:

Date (from first line); Host: 192.168.1.3; Status: Up
Date (from first line); Host: 192.168.1.5; Status: Up
Date (from first line); Host: 192.168.1.6; Status: Up

Je veux que le fichier texte lise:

Sun Apr 7 14:16:30 
Host: 192.168.1.3; Status: Up
Host: 192.168.1.5; Status: Up
Host: 192.168.1.6; Status: Up


5 commentaires

Veuillez mettre un échantillon dans la question. Vous devez également montrer votre tentative, sous forme de code, ici.


Veuillez ajouter un exemple d'entrée et la sortie souhaitée pour cet exemple d'entrée à votre question.


Cette question nécessite-t-elle encore plus d'informations? Toutes mes excuses, c'est ma première fois ...


La seule chose qui manque encore pour en faire une bonne question pour ce forum est votre tentative de la résoudre vous-même, peu importe à quel point vous pensez qu'ils étaient.


Veuillez consulter: Que dois-je faire lorsque quelqu'un répond à ma question?


4 Réponses :


4
votes
awk -v OFS='; ' 'NR==1{d=$0;next}{print d,$0}' file

5 commentaires

Vous pouvez également définir OFS = '; ' puis print d, $ 0 - un peu plus facile à lire.


ou plus facile à lire: awk '{if (NR == 1) {date = $ 0} else {print date ";" $ 0}}' file


@Cyrus qui ne ressemble même pas à un awk


@oguzismail: Ouais, c'est trop facile;)


@Cyrus laisse quand même ton commentaire y rester peut-être que cela aide l'op à mieux comprendre s'il n'est pas familier avec awk



2
votes

Ci-dessous awk aiderait:

Date Sun Apr 7 14:16:30; Host: 192.168.1.3; Status: Up
Date Sun Apr 7 14:16:30; Host: 192.168.1.5; Status: Up
Date Sun Apr 7 14:16:30; Host: 192.168.1.6; Status: Up

Exemple de sortie

awk 'NR==1{Date="Date" FS $0 ";" FS}NR!=1{print Date $0}' file

p >


0 commentaires

0
votes

Cela pourrait fonctionner pour vous (GNU sed):

sed '1h;1d;G;s/\(.*\)\n\(.*\)/Date \2; \1/' file

Faites une copie de la première ligne.

Supprimez la première ligne.

Ajoutez la première ligne à la ligne actuelle.

Réorganisez la première ligne pour qu'elle soit devant la ligne actuelle et qu'elle soit précédée du littéral Date et suivie de ;


0 commentaires

0
votes

essayé sur gnu awk, par respect pour la 1ère ligne #

awk '$0~/\s*(Sun|Mon|Tue|Wed|Thu|Fri|Sat)/{a=$0;next}{print "Date "a,$0}' d

par respect pour le motif

 awk 'NR==1{a=$0;next}{print "Date "a,$0}' d


0 commentaires