2017-10-10 3 views
0

J'ai un fichier dans Linux. Ce fichier contient les noms de tables.Créer de nouveaux fichiers sous Linux en fonction des conditions

Maintenant, je veux vérifier ce fichier et créer des fichiers en fonction des conditions.

table=${} 
validateTable=$(hive --database "${hivedb}" -e "SHOW TABLES LIKE '$table'") 
if [[ -z $validateTable ]]; then 
    Add to file New_imports 
else 
    Add to file Already exists 
fi 

Par exemple:

Le fichier contient

table1 
table2 
table3 
table4 

Dans les tableaux ci-dessus table1 et table2 sont déjà existants.

Je veux deux fichiers

1) New_imports pour les tables qui n'existent pas 2) existe déjà pour les tables qui existent

new_imports

table3 
table4 

already exists

table1 
table2 

Comment puis-je ac Hieve mon résultat

#!/bin/bash 
while read table ; do 
    table=${1:1:-1} 
    validateTable=$(hive --database "${hivedb}" -e "SHOW TABLES LIKE '$table'") 
    if [[ -z $validateTable ]]; then 
     echo "$table" >> New_imports 
    else 
     echo "$table" >> Already_exists 
    fi 
done < tableFile 
+0

Vous ne savez pas pourquoi quelqu'un a déprécié même votre Q. d'origine Eh bien! – shellter

Répondre

2
#!/bin/bash 
while read table ; do 
    table=$(echo "$table" | sed 's/[][]//g;s/'"'"'//g') 
    validateTable=$(hive --database "${hivedb}" -e "SHOW TABLES LIKE '$table'") 
    if [[ -z $validateTable ]]; then 
     echo "$table" >> New_imports 
    else 
     echo "$table" >> Already_exists 
    fi 
done < tableFile 

devriez obtenir votre commencé. Rendre cette preuve pare-balles et ainsi pouvoir accepter des arguments, cela prendra encore plus de temps.

La gestion des fichiers de sortie peut être fastidieuse. Notez qu'avec l'utilisation de >> signifie ajouter, donc chaque fois que vous exécutez ceci, vous devez soit supprimer ces fichiers, soit les gérer. Je vous recommande de les garder avec horodatés intégrés dans le nom de fichier comme

echo "$table" >> new_imports.$(/bin/date +%Y-%m-%d.%H:%M) 

Aussi, je n'ai pas de toute façon de tester cela avec hive, c'est donc une solution générale.

IHTH

+0

mes noms de table dans le fichier seront comme [['testing_1234'] '. De cela, je veux obtenir 'testing_1234' comme nom de la table et passer au script. Lorsque je fais cela, le script ne lit pas le nom de la table s'il vous plaît vérifier éditer une partie de ma question –

+0

ce qui se passe si vous exécutez 'hive --database" $ {hivedb} "-e" MONTRER DES TABLEAUX COMME '[' testing_1234 ']' "' (ou ''\ [' testing_1234 '\]'') (ou ''\ [testing_1234 \]'' (ou autres citations)) de la cmd-line. Si cela ne fonctionne pas, éditez votre Q pour montrer quelle forme de 'testing_1234' fonctionne à partir de cmd-line. Je sors un moment ce soir, je vais essayer de vérifier dans la mesure du possible. Bonne chance. – shellter

+0

la seule forme qui fonctionne pour 'hive --database" $ {hivedb} "-e" SHOW TABLES LIKE testing_1234 "' est 'testing_1234' l'instruction hive ne fonctionne que lorsque les tables sont comme' testing_1234' cela ne fonctionne pas avec d'autres cotations –