Existe-t-il un moyen simple d’ajouter un en-tête et une fin à un fichier texte existant? Même répertoire même fichier texte. Par exemple le awk
?
Appréciez l’aide fournie pour expliquer comment la traiter awk
. Merci.
Parce que ce que je sais consiste en quelques étapes. S'il vous plaît se référer à ci-dessous:
Supposons que je veuille ajouter un en-tête à fin de fichier dans un fichier existant ALERT.txt.
Le fichier se trouve dans le répertoire appelé$Source_Dir
Le fichier texte contient le nom de la colonne, donc j’ai deux variables Record_Count
et Actual_Record_Count
compter l’enregistrement:
Record_Count=`wc -l < ${Source_Dir}/${Output_File_Name} | tr -d " "`
Actual_Record_Count=`expr ${Record_Count} - 1`
Tout d'abord, je crée un fichier texte appelé ALERT
avec l'en-tête$Target_Dir
echo ${Bus_date} >${Target_Dir}/${Output_File_Name}
Ensuite, j’ajoute le Alert.txt
de $Source_Dir
au nouveau fichier créé dans$Target_Dir
cat ${Source_Dir}/${Output_File_Name} >> ${Target_Dir}/${Output_File_Name}
Enfin, je continue d’ajouter la bande-annonce au fichier Alert.txt
dans $Target_Dir
.
La bande-annonce contient le nombre d'enregistrements
echo "EOF${Actual_Record_Count}" >>${Target_Dir}/${Output_File_Name}
la source
printf '%s\n%s\n%s\n' "HEADER" "$(<alert.txt)" "FOOTER" >alert.txt.tmp && mv alert.txt.tmp alert.txt
?{ echo "HEADER"; cat alert.txt; echo "FOOTER"; } > tmp && mv tmp alert.txt
awk
me semble bon: vous pouvez probablement éviter lewc -l
problème et utiliser simplement le nombre d’enregistrements de awkNR
dans unEND
bloc, par exempleawk -v bus_date="${BUS_DATE}" 'BEGIN{print bus_date} {print} END{printf "EOF%d\n", NR}' file
. S'ilBUS_DATE
ne s'agit en réalité que d'un horodatage, vous pourrez peut-être également le générer en interne (du moins avec GNU awk).Réponses:
Donc, vous avez une variable shell,
$Bus_date
que vous voulez ajouter sur une ligne par elle-même comme en-tête. Ensuite, il devrait suivre le contenu de$Source_Dir/$Output_File_Name
, suivi de la chaîneEOFNN
oùNN
est le nombre de lignes dans ce fichier moins un.Utilisant
awk
:Le script est:
Sur la ligne de commande, nous définissons la
awk
variablehead
sur la valeur de$Bus_date
. Cette valeur est sortie avant que nous commencions à lire le fichier donné, par leBEGIN
bloc.Le
{ print }
bloc veille à ce que le fichier donné soit transmis tel quel, sans modification.Le
END
bloc utilise la variable intégréeNR
qui contient le nombre d'enregistrements (lignes) lus jusqu'à présent. Dans leEND
bloc,NR
sera le nombre de lignes dans le fichier qui a été lu.la source