spaces to tabs - group with IP


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting spaces to tabs - group with IP
# 8  
Old 12-31-2010
Try this,

Code:
awk '!/^$/{if(/^[0-9]../){if(a[$1]) {next;} else {a[$1]++;printf $0}} else {for(i=1;i<=NF;i++){if(i<=3){printf "\t" $i}else {printf $i} if(i>3 || i==NF){printf i==NF?RS:FS}}}}' infile

# 9  
Old 12-31-2010
@Scrutinizer;

Thanks but there shouldnot be TAB on IP line. Look at my post above. your code is putting TAB to everyline. The line starting with IP wouldnot have any TAB. could you please make an exception for this situation?

---------- Post updated at 14:26 ---------- Previous update was at 14:21 ----------

@pravin27, it is giving syntax error Smilie :

Code:
nawk: sytnax error at source line 1
context is ...
nawk: illegal statement at source line 1

# 10  
Old 12-31-2010
Quote:
Originally Posted by gc_sw
@pravin and @ludwig;

both your solutions are OK, thanks. but actually the results are seperated by SPACE. i just need TABS to seperate first two values. could you please just show how replace those SPACEs by TABs. i think we can use another code to do it.

the problem now is, replacing your output file:
Code:
192.168.2.1\tParameterObject=1\spaceSpeech\space2
\tParameterObject=2\spaceSpeech\space2
...

with this one:
Code:
192.168.2.1\tParameterObject=1\tSpeech\t2
\tParameterObject=2\tSpeech\t2
...

Here you seem to be suggesting using tabs on the IP line, no?
# 11  
Old 12-31-2010
Hi,

It's working fine for me ...

Code:
awk '!/^$/{if(/^[0-9]../){if(a[$1]) {next;} else {a[$1]++;printf $0}} else {for(i=1;i<=NF;i++){if(i<=3){printf "\t" $i}else {printf $i} if(i>3 || i==NF){printf i==NF?RS:FS}}}}' input_file

O/P
Code:
192.168.1.1     ParameterObject=1       Speech  1
        ParameterObject=2       Speech  1
        ParamFunction=1 UserID  1(DEACTIVATED)
        Sector=1,Device=2,Unit=3        DeviceId        1
        FeederCable=2B  DelayTime       i[15]= 1248 1248 1248
        FeederCable=2C  DelayTime       i[15]= 1248 1248 1248
        FeederCable=2D  DelayTime       i[15]= 1248 1248 1248
        Function=1      MeanTime        i[24]= 0 0 0 0 0
        FileLocation=1  Address /c/user/
192.168.2.1     ParameterObject=1       Speech  2
        ParameterObject=2       Speech  2
        ParamFunction=1 UserID  1(DEACTIVATED)
        Sector=1,Device=2,Unit=3        DeviceId        1
        FeederCable=2A  DelayTime       i[25]= 3248 1248 1248
        FeederCable=2A  DelayTime       i[25]= 3248 1248 1248
        FeederCable=2A  DelayTime       i[25]= 3248 1248 1248
        Function=1      MeanTime        i[24]= 0 0 0 0 0
        FileLocation=1  Address /c/user/

# 12  
Old 12-31-2010
@Scrutinizer;
your code, resulting below, putting tab to the beginning of IP line. IP line wouldnot start with tab (blue tab shouldnot be there) Smilie.
Code:
\t192.168.2.1\tParameterObject=1\tSpeech\t2
\tParameterObject=2\tSpeech\t2
...


Last edited by gc_sw; 12-31-2010 at 08:56 AM..
# 13  
Old 12-31-2010
I admit that my proposed solution may not be the shortest one offered (the one-liner is quite good, btw) , but I did not assume that the i/p-addresses would be in order. But my proposed solution does put tabs between the first two values, as shown here:
Code:
192.168.2.1\tabParameterObject=1\tabSpeech\tab2$
\tabParameterObject=2\tabSpeech\tab2$
\tabParamFunction=1\tabUserID\tab1 (DEACTIVATED)$
\tabSector=1,Device=2,Unit=3\tabDeviceId\tab1$
\tabFeederCable=2A\tabDelayTime\tabi[25] = 3248 1248 1248$
\tabFeederCable=2A\tabDelayTime\tabi[25] = 3248 1248 1248$
\tabFeederCable=2A\tabDelayTime\tabi[25] = 3248 1248 1248$
\tabFunction=1\tabMeanTime\tabi[24] = 0 0 0 0 0$
\tabFileLocation=1\tabAddress\tab/c/user/$
192.168.1.1\tabParameterObject=1\tabSpeech\tab1$
\tabParameterObject=2\tabSpeech\tab1$
\tabParamFunction=1\tabUserID\tab1 (DEACTIVATED)$
\tabSector=1,Device=2,Unit=3\tabDeviceId\tab1$
\tabFeederCable=2B\tabDelayTime\tabi[15] = 1248 1248 1248$
\tabFeederCable=2C\tabDelayTime\tabi[15] = 1248 1248 1248$
\tabFeederCable=2D\tabDelayTime\tabi[15] = 1248 1248 1248$
\tabFunction=1\tabMeanTime\tabi[24] = 0 0 0 0 0$
\tabFileLocation=1\tabAddress\tab/c/user/$

If you look at my proposed solution:
Quote:
Originally Posted by m.d.ludwig
<snip>...
Code:
1.  $, = "\t";
2.  $" = ' ';

3.  while (my ($ip, $X) = each %X) {
4.      foreach my $line (@{$X}) {
5.          my @L = split /\s+/, $line;
6.          my $a = shift @L;
7.          my $b = shift @L;

8.          print $ip, $a, $b, "@L";
9.          $ip = '';
    }
    }

In line 1., the output field separator is set to tab, and in line 2, the list separator character, used when a list is interpolated by a double-quoted string, is set to space. So in line 5, each input line is split into words. The first two are removed from the list in lines 6 and 7 (yes, I could have used slices, but I was trying to be obvious), and then the whole line is printed on line 8, with tabs between the i/p-address, the first word, the second word, and the rest of the list. The rest of the list itself will be space separated.
# 14  
Old 12-31-2010
Quote:
Originally Posted by gc_sw
@Scrutinizer;
your code, resulting below, putting tab to the beginning of IP line. IP line wouldnot start with tab (blue tab shouldnot be there) Smilie.
Code:
\t192.168.2.1\tParameterObject=1\tSpeech\t2
\tParameterObject=2\tSpeech\t2
...

I don't think it does actually.. When I am running it there is not \t in front of the IP.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Grab line regardless of if it ends with tabs or spaces

so i have a data file that has various lines which may or may not end with spaces or tabs. data.file: , \t \t {sample} <spaces> <spaaces> several more spaces.... {"resemble"}, <nospaces> Command i'm using: sed -n 8p data.file | egrep "\],$|\],\ $" or egrep "\],$|\],\ $"... (1 Reply)
Discussion started by: SkySmart
1 Replies

2. UNIX for Advanced & Expert Users

Vimrc creating tabs instead of spaces

I'm having trouble getting my vimrc to work the way I want it. For some reason after I hit enter it is creating tabs instead of spaces like I would expect. Here is an example of what I am talking about. $ = newline, ^I = tab. On the line of struct EDGETAG* q; I hit enter and it created a tab... (2 Replies)
Discussion started by: cokedude
2 Replies

3. Shell Programming and Scripting

Remove spaces / tabs from variable in script

I want to remove extra spaces from variable in aix script. We retrieve the data from oracle database and then print the values. We have a value on 90th position. When we execute the query on sqlplus it shows the length of 90th position as 3, but when we use the same query in aix script it shows... (5 Replies)
Discussion started by: lodhi1978
5 Replies

4. Shell Programming and Scripting

replace spaces/tabs with delimiter |

Hi, I'm looking for a command that replaces spaces/tabs with pipe symbol and store the result to the same file instead of routing it to another file. infile outfile Thanks. (11 Replies)
Discussion started by: dvah
11 Replies

5. Shell Programming and Scripting

Replacing tabs with spaces

I want my program to replace tabs with spaces.1tab=4spaces.When i write aa(tab)aaa(tab)(tab)a(tab) it must show me aaxxaaaxxxxxaxxx. I think that my program works corectly but when a write aaa(tab)a it must show aaaxa but it is aaaxxxxxa.Please for help!!! That is my code: #include <stdio.h> ... (3 Replies)
Discussion started by: marto1914
3 Replies

6. Shell Programming and Scripting

clear extra spaces and tabs in a file

Any help appreciated Thanks sample input: > (extra spaces&tabs in here) test1 (extra spaces&tabs in here) 123.123.123.123 (extra spaces&tabs in here) abc (extra spaces&tabs in here) 123 --- < (extra spaces&tabs in... (3 Replies)
Discussion started by: goofist
3 Replies

7. UNIX for Dummies Questions & Answers

Problem with White spaces and tabs

Hi All, I am facing issues converting white spaces and tabs together in a file I am reading. Here is the command I am trying: tr -s ' '@ | sort -t@ +1n filename I guess the problem is that it is not converting the tabs to another delimiter. Also, I am supposed to accomplish this only using... (5 Replies)
Discussion started by: sh_kk
5 Replies

8. Shell Programming and Scripting

spaces or Tabs?

When formatting a script let's say for instance the following: case ${choice} in 1) vi ${tmp1}.tmp # overwrite the tmp1 var with any user changes cp ${tmp1}.tmp ${tmp1} ;; ... (2 Replies)
Discussion started by: llsmr777
2 Replies

9. Shell Programming and Scripting

replacing tabs to spaces from files

hi, I have some 50 C files in which for indentation of code some devlopers used tabs, but we dont want any tab used for indentation. I have following 2 need. 1) find tabs from all 50 files (which are in one directory ) 2) replace them with 4 spaces. Thanks Rishi (6 Replies)
Discussion started by: rishir
6 Replies

10. Shell Programming and Scripting

Converting tabs in to spaces.

Hi! I'm using SunOS 5.7 w/ Bash 2.01. Currently, I'm working on a script that will make it possible to find textfiles which match certain criteria. While I write this message, I had some brainfarts, found the answer myself :D and the question I had in mind is now no longer the question I... (3 Replies)
Discussion started by: indo1144
3 Replies
Login or Register to Ask a Question