2017-09-13 4 views
1

Je suis en train d'écrire un script bash et j'ai un fichier comme ceci:Sélectionnez le dernier champ d'une ligne avec un nombre uniq égal à un

 3 5d74727d50368c4741d76989586d91de ./2.txt 
     3 63ce7868edd509987925e98e129e232a ./3.txt 
     2 9fc16dbef316035af400fac82aba9c36 ./fff/fff/fff/fff 
     3 d41d8cd98f00b204e9800998ecf8427e ./1 
     1 d41d8cd98f00b204e9800998ecf8427e ./11.txt 
     3 d41d8cd98f00b204e9800998ecf8427e ./12/1 
     3 d41d8cd98f00b204e9800998ecf8427e ./12/1.txt 
     3 d41d8cd98f00b204e9800998ecf8427e ./12/2.txt 
     1 d41d8cd98f00b204e9800998ecf8427e ./13 
     3 d41d8cd98f00b204e9800998ecf8427e ./4.txt 
     3 d41d8cd98f00b204e9800998ecf8427e ./5.txt 
     1 d41d8cd98f00b204e9800998ecf8427e ./6.txt 
     3 d41d8cd98f00b204e9800998ecf8427e ./ala 
     1 d41d8cd98f00b204e9800998ecf8427e ./a.txt 
     3 d41d8cd98f00b204e9800998ecf8427e ./b/c/d/e/f/ass 
     3 d41d8cd98f00b204e9800998ecf8427e ./kota 
     1 d41d8cd98f00b204e9800998ecf8427e ./ma 
     2 d41d8cd98f00b204e9800998ecfkkkkk ./6.txt 
     2 d41d8cd98f00b204e9800998ecflllll ./a.txt 
     2 d41d8cd98f00b204e9800998ecfmmmmm ./ma 

qui est un effet d'une commande:

cat file1 file2 file2 | sort | uniq -c

maintenant, je voudrais sélectionner des lignes avec un nombre égal à 1, puis imprimer seulement le dernier champ de la ligne si l'effet désiré serait:

./11.txt 
./13 
./6.txt 
./a.txt 
./ma 

Je ne suis pas très à l'aise avec bash et je me demandais s'il y a une solution simple à cela.

Répondre

2

Vous pouvez le faire en Awk simplement

awk '$1=="1"{print $NF}' file 

sens, dans Awk$1 est le premier champ de chaque ligne divisé par le séparateur (si pas d'autres options sont définies seul espace blanc étant la valeur par défaut) . Nous examinons les lignes contenant premier champ comme 1 et dans ces lignes la clause d'action est d'imprimer le dernier champ (représenté par $NF dans Awk)

+1

Fonctionne parfaitement! Merci! – madasionka

1

essayer de suivre aussi une fois et laissez-moi savoir si cela vous aide.

awk '{printf("%s",$1==1?$NF RS:"")}' Input_file 

En utilisant printf pour imprimer, vérifier s'il est premier champ 1 puis imprimez la dernière colonne avec une nouvelle ligne (RS est séparateur enregistrement dont la valeur par défaut est nouvelle ligne) else print « » (NULL).

+1

Fonctionne bien! Merci! – madasionka