Hi all;
Here is my file which contains a list of files (recent versions of files are in red). This file is dynamic, files versions can change at any time (versions can increment)
filename
-------------------------------------------------------
/tmp/g-72.n.gggg1000.fr-worker1.V.3.tar.bz2
/tmp/g-9.n.gggg1000.fr-worker1.V.2.tar.bz2
/tmp/g-85.n.gggg1000.fr-worker1.V.3.tar.bz2
/tmp/g-72.n.gggg1000.fr-worker1.V.2.tar.bz2
/tmp/g-92.n.gggg1000.fr-worker1.V.4.tar.bz2
/tmp/g-85.n.gggg1000.fr-worker1.V.2.tar.bz2
/tmp/g-72.n.gggg1000.fr-worker1.V.1.tar.bz2
/tmp/g-72.n.gggg1000.fr-worker1.V.4.tar.bz2
/tmp/g-92.n.gggg1000.fr-worker1.V.2.tar.bz2
/tmp/g-9.n.gggg1000.fr-worker1.V.3.tar.bz2
/tmp/g-92.n.gggg1000.fr-worker1.V.1.tar.bz2
/tmp/g-9.n.gggg1000.fr-worker1.V.1.tar.bz2
/tmp/g-85.n.gggg1000.fr-worker1.V.1.tar.bz2
/tmp/g-92.n.gggg1000.fr-worker1.V.3.tar.bz2
/tmp/g-85.n.gggg1000.fr-worker1.V.4.tar.bz2
Please, can you help me to write a shell script that extract all old versions (i.e: lines in black) ?
Thank you so much for help.
Kind regards.
RudiC
March 14, 2016, 6:31am
2
{ read A; read B; printf "%s\n" $A $B; sort -r; } < file | awk -F\. '!T[$1,$2,$3]++'
filename
-------------------------------------------------------
/tmp/g-9.n.gggg1000.fr-worker1.V.3.tar.bz2
/tmp/g-92.n.gggg1000.fr-worker1.V.4.tar.bz2
/tmp/g-85.n.gggg1000.fr-worker1.V.4.tar.bz2
/tmp/g-72.n.gggg1000.fr-worker1.V.4.tar.bz2
1 Like
Thank you so much for answer.
Please, i have to extract old versions (lines in blacks) not recent ones (lines in red).
Thanks a lot.
Kind regards.
Ok. I have used 'sort' instead of 'sort -r'
{ read A; read B; printf "%s\n" $A $B; sort; } < file | awk -F\. '!T[$1,$2,$3]++'
I have only !
filename
-------------------------------------------------------
/tmp/g-72.n.gggg1000.fr-worker1.V.1.tar.bz2
/tmp/g-85.n.gggg1000.fr-worker1.V.1.tar.bz2
/tmp/g-92.n.gggg1000.fr-worker1.V.1.tar.bz2
/tmp/g-9.n.gggg1000.fr-worker1.V.1.tar.bz2
Any help please ?
Bests.
RudiC
March 14, 2016, 7:11am
6
In post#2, remove the exclamation mark in front of the T array.
1 Like
I have this output:
/tmp/g-9.n.gggg1000.fr-worker1.V.2.tar.bz2
/tmp/g-9.n.gggg1000.fr-worker1.V.1.tar.bz2
/tmp/g-92.n.gggg1000.fr-worker1.V.3.tar.bz2
/tmp/g-92.n.gggg1000.fr-worker1.V.2.tar.bz2
/tmp/g-92.n.gggg1000.fr-worker1.V.1.tar.bz2
/tmp/g-85.n.gggg1000.fr-worker1.V.3.tar.bz2
/tmp/g-85.n.gggg1000.fr-worker1.V.2.tar.bz2
/tmp/g-85.n.gggg1000.fr-worker1.V.1.tar.bz2
/tmp/g-72.n.gggg1000.fr-worker1.V.3.tar.bz2
/tmp/g-72.n.gggg1000.fr-worker1.V.2.tar.bz2
/tmp/g-72.n.gggg1000.fr-worker1.V.1.tar.bz2
That's what i need. Thank you so much for help. Kind regards.
RudiC
March 14, 2016, 7:19am
8
To retain the header, use
{ read A; read B; printf "%s\n" $A $B; sort -r | awk -F\. 'T[$1,$2,$3]++'; } <file
filename
-------------------------------------------------------
.
.
.
Hi,
Please, with this code:
#! /bin/sh
{ read A; read B; printf "%s\n" $A $B; sort -r ; } < Versions.txt | awk -F\. 'T[$1,$2,$3]++'
and this file:
filename
-------------------------------------------------------
/tmp/g-85.n.gggg1000.fr-worker3.V.1.tar.bz2
/tmp/g-85.n.gggg1000.fr-worker2.V.2.tar.bz2
/tmp/g-85.n.gggg1000.fr-worker3.V.2.tar.bz2
/tmp/g-85.n.gggg1000.fr-worker1.V.1.tar.bz2
/tmp/g-85.n.gggg1000.fr-worker2.V.3.tar.bz2
/tmp/g-85.n.gggg1000.fr-worker2.V.1.tar.bz2
/tmp/g-85.n.gggg1000.fr-worker1.V.3.tar.bz2
/tmp/g-85.n.gggg1000.fr-worker1.V.2.tar.bz2
/tmp/g-85.n.gggg1000.fr-worker3.V.3.tar.bz2
I have this output
/tmp/g-85.n.gggg1000.fr-worker3.V.2.tar.bz2
/tmp/g-85.n.gggg1000.fr-worker3.V.1.tar.bz2
/tmp/g-85.n.gggg1000.fr-worker2.V.3.tar.bz2
/tmp/g-85.n.gggg1000.fr-worker2.V.2.tar.bz2
/tmp/g-85.n.gggg1000.fr-worker2.V.1.tar.bz2
/tmp/g-85.n.gggg1000.fr-worker1.V.3.tar.bz2
/tmp/g-85.n.gggg1000.fr-worker1.V.2.tar.bz2
/tmp/g-85.n.gggg1000.fr-worker1.V.1.tar.bz2
Please, how can i change the script to delete also the red lines ?
Thanks a lot for help.
Best reagards.
---------- Post updated at 02:54 PM ---------- Previous update was at 12:59 PM ----------
it works fine with:
#! /bin/sh
{ read A; read B; printf "%s\n" $A $B; sort -r ; } < Versions.txt | awk -F\. 'T[$1,$2,$3,$4]++'