spaces to tabs - group with IP


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting spaces to tabs - group with IP
# 1  
Old 12-30-2010
Data spaces to tabs - group with IP

hi buddies;

i have a file.txt:
Note: All the seperators are SPACE.
Code:
192.168.1.1
ParameterObject=1     Speech     1
ParameterObject=2     Speech     1

192.168.1.1
ParamFunction=1     UserID     1 (DEACTIVATED)
Sector=1,Device=2,Unit=3     DeviceId     1

192.168.1.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

192.168.1.1

192.168.1.1

192.168.1.1
Function=1     MeanTime     i[24] = 0 0 0 0 0

192.168.1.1
FileLocation=1     Address     /c/user/

...
...

192.168.2.1
ParameterObject=1     Speech     2
ParameterObject=2     Speech     2

192.168.2.1
ParamFunction=1     UserID     1 (DEACTIVATED)
Sector=1,Device=2,Unit=3     DeviceId     1

192.168.2.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

192.168.2.1

192.168.2.1
Function=1     MeanTime     i[24] = 0 0 0 0 0

192.168.2.1
FileLocation=1     Address     /c/user/

192.168.2.1

...

i need help to;

- search lines under same IP and get them. (values are seperated by SPACE and some IP lines have no attributes)
- write it as (values must be seperated by TABS:
Code:
IP1\tab$1\tab$2\tab$RemainingEverything...
\tab$1\tab$2\tab$RemainingEverything...

IP2\tab$1\tab$2\tab$RemainingEverything...
\tab\$1\tab$2\tab$RemainingEverything...

so; i want to organise this file as:
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/

...
...


hope to tell it clearly. it's quite complex Smilie
# 2  
Old 12-30-2010
Since I like PERL:
Code:
#! /usr/bin/perl

use strict;
use warnings;

my $ip = undef;
my %X  = ();

$\ = "\n";
$, = '';

while (<>) {
    chomp;
    next if m{^\s*$};
    if (m{^\d+\.\d+\.\d+\.\d+$}) { $ip = $_; next; }
    push @{$X{$ip}}, $_;
}

$, = "\t";
$" = ' ';

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

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

which results in
Code:
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/
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/

# 3  
Old 12-30-2010
Something like this,

Code:
 awk '!/^$/{if(/^[0-9]../){if(a[$1]) {next;} else {a[$1]++;printf "\n";printf $0 FS}} else {printf "\t" $0 "\n"}}' inputfile

# 4  
Old 12-31-2010
@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
\tParamFunction=1\spaceUserID\space1 (DEACTIVATED)
\tSector=1,Device=2,Unit=3\spaceDeviceId\space1
\tFeederCable=2A\spaceDelayTime\spacei[25] = 3248 1248 1248
\tFeederCable=2A\spaceDelayTime\spacei[25] = 3248 1248 1248
\tFeederCable=2A\spaceDelayTime\spacei[25] = 3248 1248 1248
\tFunction=1\spaceMeanTime\spacei[24] = 0 0 0 0 0
\tFileLocation=1\spaceAddress\space/c/user/
192.168.1.1\tParameterObject=1\spaceSpeech\space1
\tParameterObject=2\spaceSpeech\space1
\tParamFunction=1\spaceUserID\space1 (DEACTIVATED)
\tSector=1,Device=2,Unit=3\spaceDeviceId\space1
\tFeederCable=2B\spaceDelayTime\spacei[15] = 1248 1248 1248
\tFeederCable=2C\spaceDelayTime\spacei[15] = 1248 1248 1248
\tFeederCable=2D\spaceDelayTime\spacei[15] = 1248 1248 1248
\tFunction=1\spaceMeanTime\spacei[24] = 0 0 0 0 0
\tFileLocation=1\spaceAddress\space/c/user/

with this one:
Code:
192.168.2.1\tParameterObject=1\tSpeech\t2
\tParameterObject=2\tSpeech\t2
\tParamFunction=1\tUserID\t1 (DEACTIVATED)
\tSector=1,Device=2,Unit=3\tDeviceId\t1
\tFeederCable=2A\tDelayTime\ti[25] = 3248 1248 1248
\tFeederCable=2A\tDelayTime\ti[25] = 3248 1248 1248
\tFeederCable=2A\tDelayTime\ti[25] = 3248 1248 1248
\tFunction=1\tMeanTime\ti[24] = 0 0 0 0 0
\tFileLocation=1\tAddress\t/c/user/
192.168.1.1\tParameterObject=1\tSpeech\t1
\tParameterObject=2\tSpeech\t1
\tParamFunction=1\tUserID\t1 (DEACTIVATED)
\tSector=1,Device=2,Unit=3\tDeviceId\t1
\tFeederCable=2B\tDelayTime\ti[15] = 1248 1248 1248
\tFeederCable=2C\tDelayTime\ti[15] = 1248 1248 1248
\tFeederCable=2D\tDelayTime\ti[15] = 1248 1248 1248
\tFunction=1\tMeanTime\ti[24] = 0 0 0 0 0
\tFileLocation=1\tAddress\t/c/user/

# 5  
Old 12-31-2010
Try this,

Code:
awk '!/^$/{if(/^[0-9]../){if(a[$1]) {next;} else {a[$1]++;printf $0}} else {printf "\t" $0 "\n"}}' inputfile | tr -s " " "\t"


Last edited by pravin27; 12-31-2010 at 05:37 AM..
# 6  
Old 12-31-2010
Quote:
Originally Posted by pravin27
Try this,

Code:
awk '!/^$/{if(/^[0-9]../){if(a[$1]) {next;} else {a[$1]++;printf $0}} else {printf "\t" $0 "\n"}}' inputfile | tr -s " " "\t"

pravin, this is converting ALL spaces to tabs. i donot need tab after 3rd.

look again:
Code:
192.168.2.1\tParameterObject=1\tSpeech\t2
\tParameterObject=2\tSpeech\t2
\tParamFunction=1\tUserID\t1 (DEACTIVATED)
\tSector=1,Device=2,Unit=3\tDeviceId\t1
\tFeederCable=2A\tDelayTime\ti[25] = 3248 1248 1248
\tFeederCable=2A\tDelayTime\ti[25] = 3248 1248 1248
\tFeederCable=2A\tDelayTime\ti[25] = 3248 1248 1248
\tFunction=1\tMeanTime\ti[24] = 0 0 0 0 0
\tFileLocation=1\tAddress\t/c/user/
192.168.1.1\tParameterObject=1\tSpeech\t1
\tParameterObject=2\tSpeech\t1
\tParamFunction=1\tUserID\t1 (DEACTIVATED)
\tSector=1,Device=2,Unit=3\tDeviceId\t1
\tFeederCable=2B\tDelayTime\ti[15] = 1248 1248 1248
\tFeederCable=2C\tDelayTime\ti[15] = 1248 1248 1248
\tFeederCable=2D\tDelayTime\ti[15] = 1248 1248 1248
\tFunction=1\tMeanTime\ti[24] = 0 0 0 0 0
\tFileLocation=1\tAddress\t/c/user/

# 7  
Old 12-31-2010
Code:
awk 'NF==1&&p!=$1{printf "\n%s",p=$1} NF>1{$1=$1;sub($1" "$2" ","\t"$1"\t"$2"\t");print}' file

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