-1
votes

Casser une chaîne en deux tableaux en utilisant AWK / SED / GREP

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 xxx xxx


7 commentaires

Pourquoi TEMP ajouté à répertoires_list ? Y a-t-il toujours exactement 28 caractères avant le premier / ?


Donc, si le chemin est / dir1 / dir2 / dir3 / dir4 / fichier 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 . Votre entrée n'est pas cohérente? Votre sortie n'est pas cohérente? TEMP ne doit pas être présent dans l'entrée? Theres certains algorithme pour supprimer Temp 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 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 à propos de vos besoins, puis Modifier Votre question pour les énoncer clairement.


3 Réponses :


1
votes

J'utiliserais awk pour diviser les lignes en colonnes, puis Imprimer 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 .

Ce script stocke les dossiers dans un tableau et les fichiers d'un autre. xxx

qui suppose que vous avez le fichier entrée.txt dans le fichier même répertoire et contient votre exemple de données.


0 commentaires

1
votes

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


0 commentaires

1
votes

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> xxx pré>

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


0 commentaires