Créer deux tableaux différents dans Shell / Bash Script de contenu dans un fichier texte qui a des détails sur différents fichiers. Comment extraire des répertoires dans une matrice et des noms de fichiers à un autre tableau, en utilisant AWK / SED / GREP?
J'ai un fichier texte comme indiqué ci-dessous p>
3 Réponses :
J'utiliserais Ce script stocke les dossiers dans un tableau et les fichiers d'un autre. p> qui suppose que vous avez le fichier awk code> pour diviser les lignes en colonnes, puis
Imprimer code> le numéro de colonne du dossier et le numéro de colonne du fichier. Vous pouvez raconter AWK ce que le caractère de délimitation est avec l'option
-f code>.
entrée.txt code> dans le fichier même répertoire et contient votre exemple de données. p> p>
Lire la ligne de fichier par ligne, divisée avec lire code> et ifk, utilisez basename et dirname, et lisez dans la matrice:
cat <<EOF >file
2017-02-04 07:18 /temp/folder1/filename_20170204_something.txt
2017-03-04 07:18 /temp/folder2/filename_20170204_20170304.txt
2017-04-04 07:18 /temp/folder3/filename_20170404_.txt
EOF
dirs=() files=()
while IFS=' ' read -r _ _ path; do
dirs+=("$(basename "$(dirname "$path")")")
files+=("$(basename "$path")")
done <file
declare -p dirs files
Comment voulez-vous gérer les entrées en double dans le tableau et existe-t-il un ordre spécifique que vous souhaitez enregistrer les fichiers.
Si non, vous pouvez utiliser les commandes ci-dessous ( supprime les entrées en double et les sorties Basé sur les noms de fichiers forts>) p> ci-dessous est l'explication des commandes AWK, P> awk '{print $NF}' <INPUT_FILE> -> takes the last field in the input file
awk -F'/' '{print $(NF-1)}' -> cuts the last filed with / as delimiter and takes the penultimate column
Pourquoi
TEMP code> ajouté à
répertoires_list code>? Y a-t-il toujours exactement 28 caractères avant le premier
/ code>?
Donc, si le chemin est
/ dir1 / dir2 / dir3 / dir4 / fichier code> Quelle est la règle pour laquelle des répertoires doivent être stockés? Si le formatage n'est pas cohérent, quelle est la règle pour déterminer où le chemin commence sur la ligne?
Clarifiez exactement ce que vous entendez par
il n'est pas cohérent. Temp n'est pas nécessaire code>. Votre entrée n'est pas cohérente? Votre sortie n'est pas cohérente?
TEMP code> ne doit pas être présent dans l'entrée? Theres certains algorithme pour supprimer
Temp code> de la sortie? quelle? Vos chemins sont-ils toujours 2 dirson, puis un fichier ou peut-ils varier de profondeurs?
Le format @jhnc reste identique I.E / TEMP / Dossier1 / Nom de fichier,
/ TEMP est cohérent, donc je n'ai pas besoin de cela, il suffit de nécessiter une liste dynamique dynamique et des noms de fichiers comme deux tableaux différents
Vos données de sortie ne ressemblent pas à la syntaxe de matrice valide pour Bash, AWK, SED ou GREP. Pour qui avez-vous écrit votre code?
Vous dites donc que l'outil doit analyser tous les chemins de la figure si l'une des principales séquences de répertoires est courante sur tous les chemins (par exemple, s'ils ont tous commencé avec
/ Temp / FOO / BAR CODE CODE > Ensuite, l'outil doit reconnaître cela et non inclure Temp ou FOO ou Barre dans la sortie) ou indiquez-vous autre chose? S'il vous plaît juste penser b> à propos de vos besoins, puis Modifier Votre question pour les énoncer clairement.