J'écris un script pour comparer le nom de fichier ajouté à la date (AAAA-MM-DD) avec date du fichier modifié.
Exemple: P>
filename.2019-01-07.log 2019-01-09 filename.2019-01-07.log 2019-01-07 filename.2019-01-07.log 2019-01-07
3 Réponses :
Quelque chose comme peut faire le travail:
awk: {if ($ 2! = 4 $) puis imprimez} AWK: ^ Erreur de syntaxe Il lance une erreur à l'impression, pouvez-vous me suggérer avec un exemple
@Sudhakar, où le point d'erreur est-il exactement?
au mot clé "print"
@Ssudhakar, vois ma réponse corrigée
Cela ne m'a pas donné les choses rares, mais elle affichait toutes les lignes du fichier.
@Sudhakar, combien d'espaces avez-vous entre deux cordes?
J'ai 10 espace entre deux, j'ai utilisé TR '' \ T '
Donc, vous devriez remplacer tant d'espace avec un seul et utiliser 4 $ ou TUNE 6 $ pour être 13 $ (ou 14 $)
A la façon dont la commande n'utilise aucun nom de fichier, à quel fichier cela devrait fonctionner. J'ai utilisé la commande quelque chose comme ça awk -f '[.]' '{if ($ 2! = 6 $ 6) print}' myfile.csv me permet de savoir s'il y a une meilleure façon
@Sudhakar, je donne le programme, laissant la mise en œuvre à vous. Cela (vous utilisez) est le meilleur moyen
Supprimer chaque ligne qui a un motif répété: ou plus précis p>
Merci Walter! ça a marché
Essayez cette perl one-liner
$ cat sudhakar.txt filename.2019-01-07.log 2019-01-09 filename.2019-01-07.log 2019-01-07 filename.2019-01-07.log 2019-01-07 $ perl -nE ' print unless /filename\.([\d-]+)\.log\s+\1/ ' sudhakar.txt filename.2019-01-07.log 2019-01-09 $
@zdim .. Oui Répondez mise à jour .. perl -ne 'Imprimer si /filename.([\d-]+).log\s+(? !\\1)/' sudhakar.txt code> n'est pas travail
Hm. Dans un test simple, l'utilisation de la brouillon dans un lookahead négatif ne fonctionne pas si précédemment par ... tout ce qui est + code>, donc par un modèle de longueur variable, je pense. Je ne sais pas pourquoi et ne peut pas creuser dans les docs maintenant, mais mettre un retour à l'intérieur d'une lunette de regard négative ressemble à la poussée :). Votre solution est beaucoup plus solide: recherchez une correspondance sur ce qui est requis, imprimez si cela échoue. Regex est d'abord sur la correspondance, pas sur la non-correspondance.
Exemple de jouer avec: perl -we '$ _ = shift || q (ah ah); Dis si / (ah) \ s + (?! \ 1) / ' Code> Imprime rien, correctement. Si vous le transmettez
"ah ah" code> (deux espaces) (donc,
perl -we '...' "ah ah" code>) - il imprime! Ça ne devrait pas. Mais si vous modifiez
\ s + code> sur
\ s \ s code> alors c'est bien à nouveau (pas d'impression). Envoyer
"ah no" code> ou dedon-toi et fonctionne (impression). Il en va de même avec des chiffres entre les mots (ce n'est pas seulement des espaces): Match sur
/ (ah) \ d + (?! \ 1) / code> et passe
"AH2AH" CODE> Et c'est bon (pas d'imprimé) mais pour
"ah22ah" code> il échoue (impressions). Avec
\ d \ d code> cela fonctionne.
@zdim .. Grandes explications! .. Merci beaucoup