Uniq or sort -u or similar only between { }


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Uniq or sort -u or similar only between { }
# 1  
Old 11-07-2014
Uniq or sort -u or similar only between { }

Hi !
I am trying to remove doubbled entrys in a textfile only between delimiters.
Like that example but i dont know how to do that with sort or similar.

input:
Code:
{
   aaa
   aaa
}
{
   aaa
   aaa
}

output:
Code:
{
   aaa
}
{
   aaa
}

i would be pleasured for every help !
Mfg Fugitivus
# 2  
Old 11-07-2014
Please post whatever you tried till now.
# 3  
Old 11-07-2014
i have tried nothing, i have read the man page for sort but i didnt find any idea how to do that, same thing on uniq i didnt know if uniq or sort can do that thinks.
I am yust beginning with doing such things in a shell script Smilie
Because of that i have posted here to have any evidence what i should look for.

Mfg Fugitivus
# 4  
Old 11-07-2014
Hello Fugitivus,

Following may help you in same, let's say we have following input file.
Input file:
Code:
cat tst4567
{
   aaa
   bbb
   aaa
   ccc
}
{
   aaa
   aaa
}

Then we can use following code.
Code:
awk '/\{/ {print $0} !/\{/ && !/\}/{gsub(/[[:space:]]/,A,$0);X[$0]} /\}/ {for(u in X){print u;delete X[u]}{print $0}}' tst4567

Following will be the output on same.
Code:
{
aaa
bbb
ccc
}
{
aaa
}

Hope this helps, kindly let me know if you have any queries.

EDIT: Adding one more senario, where lets say file is having some text in between braces also then following may help you.
Code:
 cat tst4567
{
   aaa
   bbb
   aaa
   ccc
}
ads
dvsah
{
   aaa
   aaa
}

Following code may help in same.
Code:
awk '/\{/ {B=1;print $0} {if(!/\{/ && !/\}/ && B==1){gsub(/[[:space:]]/,A,$0);X[$0]}} /\}/ {B=0;for(u in X){print u;delete X[u]}{print $0}} {if(B==0 && ($0 !~ /\{/) && ($0 !~ /\}/)){print $0}}' tst4567

Non one liner form for solution.
Code:
awk '
/\{/ {B=1;print $0}
{if(!/\{/ && !/\}/ && B==1)
        {gsub(/[[:space:]]/,A,$0);X[$0]}
}
/\}/ {B=0;
        for(u in X){print u;delete X[u]}
        {print $0}
     }
{if(B==0 && ($0 !~ /\{/) && ($0 !~ /\}/))
        {print $0}
}' tst4567

Output will be as follows.
Code:
{
aaa
bbb
ccc
}
ads
dvsah
{
aaa
}


Thanks,
R. Singh

Last edited by RavinderSingh13; 11-07-2014 at 05:52 AM.. Reason: Added one more senario and solution to it
This User Gave Thanks to RavinderSingh13 For This Post:
# 5  
Old 11-07-2014
thank you for your help it seems that i have to learn awk Smilie
did anyone know a goot and easy to understand awk tutorial ?!?
Mfg Fugitivus
# 6  
Old 11-07-2014
Hello,

Glad that given code is helpful for you, following are some links which can be helpful to you for awk learning.

http://www.staff.science.uu.nl/~oost...awk/nawkA4.pdf
http://www.cs.nyu.edu/~mohri/unix08/lect5.pdf


You can refer to O'Reilly books for same too. Hope this helps. Also this forum is one of the best forums/platforms to learn unix, you can always search your queries here in search option and if you have made some code and you have queries, you are always welcome to come and ask your queries. Also you can help people in their queries, by this we can help each other in learning which is the primary motive of this forum. Enjoy learning Smilie


Thanks,
R. Singh
This User Gave Thanks to RavinderSingh13 For This Post:
# 7  
Old 11-07-2014
For your original scenario, this might do:
Code:
awk     '/{/            {delete T}
         T[$0]++        {next}
         1
        '  file

For RavinderSingh's extended sc., try
Code:
awk     '/{/            {L=1; delete T}
         /}/            {L=0}
         L && T[$0]++   {next}
         1
        '  file

@RavinderSingh: the for (u in X) doesn't guarantee the order of lines in the input file; try with quite some more lines...
This User Gave Thanks to RudiC For This Post:
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Sort & Uniq -u

Hi All, Below the actual file which i like to sort and Uniq -u /opt/oracle/work/Antony/Shell_Script> cat emp.1st 2233|a.k. shukula |g.m. |sales |12/12/52 |6000 1006|chanchal singhvi |director |sales |03/09/38 |6700... (8 Replies)
Discussion started by: Antony Ankrose
8 Replies

2. UNIX for Dummies Questions & Answers

Uniq and sort -u

Hello all, Need to pick your brains, I have a 10Gb file where each row is a name, I am expecting about 50 names in total. So there are a lot of repetitions in clusters. So I want to do a sort -u file Will it be considerably faster or slower to use a uniq before piping it to sort... (3 Replies)
Discussion started by: senhia83
3 Replies

3. Shell Programming and Scripting

Sort uniq or awk

Hi again, I have files with the following contents datetime,ip1,port1,ip2,port2,number How would I find out how many times ip1 field shows up a particular file? Then how would I find out how many time ip1 and port 2 shows up? Please mind the file may contain 100k lines. (8 Replies)
Discussion started by: LDHB2012
8 Replies

4. Shell Programming and Scripting

Sort and uniq after comparision

Hi All, I have a text file with the format shown below. Some of the records are duplicated with the only exception being date (Field 15). I want to compare all duplicate records using subscriber number (field 7) and keep only those records with greater date. ... (1 Reply)
Discussion started by: nua7
1 Replies

5. Shell Programming and Scripting

sort | uniq question

Hello, I have a large data file: 1234 8888 bbb 2745 8888 bbb 9489 8888 bbb 1234 8888 aaa 4838 8888 aaa 3977 8888 aaa I need to remove duplicate lines (where the first column is the duplicate). I have been using: sort file.txt | uniq -w4 > newfile.txt However, it seems to keep the... (11 Replies)
Discussion started by: palex
11 Replies

6. Shell Programming and Scripting

Help with Uniq and sort

The key is first field i want only uniq record for the first field in file. I want the output as or output as Appreciate help on this (4 Replies)
Discussion started by: pinnacle
4 Replies

7. UNIX for Dummies Questions & Answers

match similar rows. uniq?

hi i have data which is in two columns (such as below). i need to compare two rows against each other and if one row matches the other row (except for different case), and their values in the second column are different, then it prints out one of the rows (either is fine). here is an... (5 Replies)
Discussion started by: Streetrcr
5 Replies

8. Shell Programming and Scripting

sort and uniq in perl

Does anyone have a quick and dirty way of performing a sort and uniq in perl? How an array with data like: this is bkupArr BOLADVICE_VN this is bkupArr MLT6800PROD2A this is bkupArr MLT6800PROD2A this is bkupArr BOLADVICE_VN_7YR this is bkupArr MLT6800PROD2A I want to sort it... (4 Replies)
Discussion started by: reggiej
4 Replies

9. UNIX for Dummies Questions & Answers

Help with Last,uniq, sort and cut

Using the last, uniq, sort and cut commands, determine how many times the different users have logged in. I know how to use the last command and cut command... i came up with last | cut -f1 -d" " | uniq i dont know if this is right, can someone please help me... thanks (1 Reply)
Discussion started by: jay1228
1 Replies

10. UNIX for Dummies Questions & Answers

sort/uniq

I have a file: Fred Fred Fred Jim Fred Jim Jim If sort is executed on the listed file, shouldn't the output be?: Fred Fred Fred Fred Jim Jim Jim (3 Replies)
Discussion started by: jimmyflip
3 Replies
Login or Register to Ask a Question