-3
votes

Comparez 2 rangées avec awk

J'aime imprimer tout le deuxième champ des rangées d'une rangée si leur premier champ est identique. La quantité de premiers déposées identiques est indéfinie

exemple xxx

sortie souhaitée xxx

awk

1 commentaires

Bienvenue dans le débordement de la pile! Désolé, ce n'est pas la façon dont Stackoverflow fonctionne. Les questions de la forme "Je veux faire x, veuillez me donner des conseils et / ou un code d'échantillon" sont considérés comme étant hors sujet. Veuillez visiter le centre d'aide et lire Comment Demander , et surtout lire Pourquoi "peut-il m'aider quelqu'un?" pas une question réelle?


3 Réponses :


0
votes

En supposant que votre entrée est triée:

$ awk 'p!=$1{if(NR>1) print r;p=r=$1}
{r=(r OFS $2)} END{print r}' file
1 abc def ghi
2 abc
3 abc def
  • pour chaque ligne;
    1. Si sa première colonne est égale à p code> (i.e première colonne de la ligne précédente);
      1. Si le numéro de ligne ( nr code>) est plus grand que 1; Imprimer r code>. li>
      2. peupler p code> et r code> avec la valeur de la première colonne. LI> ol> li>
      3. ajoutez un espace ( ofs code>) et la deuxième colonne de la colonne à r code>. li> ol> li>
      4. à la fin du fichier, imprimez r code>. li> ul> p>


2 commentaires

@Michelwegmueller a essayé d'expliquer, espérons que vous l'obtenez.


Bonjour @oguzismail, j'exécute cette commande avec beaucoup d'instruction d'impression pour les variables de chaque {} et a compris maintenant qui cela fonctionne. Merci beaucoup



0
votes

Pourriez-vous essayer de suivre la suivi, cela vous fournira également une sortie dans la même forme dans laquelle le 1er champ d'entrée_file est venu.

awk '
!a[$1]++{
  b[++count]=$1
}
{
  c[$1]=(c[$1]?c[$1] OFS $2:$2)
}
END{
  for(i=1;i<=count;i++){
    print b[i],c[b[i]]
  }
}'  Input_file


0 commentaires

-1
votes

Un autre awk xxx


0 commentaires