Rechercher des lignes correspondant à un modèle, à condition que leur valeur dans une colonne spécifiée apparaisse exactement deux fois dans le fichier d’entrée

Disons que l’entrée est (fichier .csv):

a,b_b,3,c d,k_k,3,f g,h_h,3,i j,k_k,4,l m,n_n,4,o p,k_k,5,q r,s_s,5,t 

Je veux cette sortie:

Toutes les lignes contenant le motif “k_k” dont le numéro dans la troisième colonne se trouve exactement dans deux lignes (ex .: numéros 4 et 5):

 j,k_k,4,l p,k_k,5,q 

C’est peut-être simple mais je ne peux pas trouver le moyen d’y parvenir. Quelqu’un pourrait-il m’aider à utiliser les lignes de commande Unix (awk)?

 awk '/k_k/' && ?? file.csv 

Je pense que tu veux quelque chose comme ça:

 awk -F, 'FNR==NR{a[$3]++;next} /k_k/ {if(a[$3]==2)print $0}' file file 

Je suppose que vous voulez dire que le nombre dans la colonne 3 apparaît exactement deux fois dans le fichier, non pas que ce soit le nombre 4 ou 5. Cette solution fait passer 2 fois votre fichier pour compter le nombre de fois temps et pour imprimer des lignes correspondantes la deuxième fois. Par conséquent, le fichier d’entrée est spécifié deux fois sur la ligne de commande.

Comme une note d’explication, il compte le nombre de fois que 1 se produit dans la colonne 3 dans un [1], et il compte le nombre de fois que 2 se produit dans la colonne 3 dans un [2] etc …

En lisant le titre de votre question, il est écrit “2 lignes maximum”, donc si cela se produit sur une seule ligne est également correct, vous devriez changer le “==” dans mon code en “<=". Je ne peux pas dire ce que tu veux dire.