-2
votes

Comparez deux mots, 1er word = nom de fichier ajouté avec date et 2e mot = juste date seul. Comparer devrait afficher les lignes avec une date différente

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


0 commentaires

3 Réponses :


1
votes

Quelque chose comme peut faire le travail: xxx


10 commentaires

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



0
votes

Supprimer chaque ligne qui a un motif répété: xxx

ou plus précis xxx


1 commentaires

Merci Walter! ça a marché



1
votes

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
$


4 commentaires

@zdim .. Oui Répondez mise à jour .. perl -ne 'Imprimer si /filename.([\d-]+).log\s+(? !\\1)/' sudhakar.txt 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 + , 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) / ' Imprime rien, correctement. Si vous le transmettez "ah ah" (deux espaces) (donc, perl -we '...' "ah ah" ) - il imprime! Ça ne devrait pas. Mais si vous modifiez \ s + sur \ s \ s alors c'est bien à nouveau (pas d'impression). Envoyer "ah no" 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) / et passe "AH2AH" Et c'est bon (pas d'imprimé) mais pour "ah22ah" il échoue (impressions). Avec \ d \ d cela fonctionne.


@zdim .. Grandes explications! .. Merci beaucoup