awk -sed help : forth . to convert to "space"


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting awk -sed help : forth . to convert to "space"
# 1  
Old 10-08-2013
awk -sed help : forth . to convert to "space"

Hi Experts,
Good day,

I am looking for the 6th fields 4th dot (.) to convert into a space in the output.

file:

Code:
tcp        0      0  10.80.110.100 2900     1 10.40.104.6.42769     ESTABLISHED
tcp        0      0  10.80.110.100 2900     1 10.40.103.7.38620     ESTABLISHED
tcp        0      0  10.80.110.100 2900     1 10.40.101.8.11764     ESTABLISHED
tcp        0      0  10.80.110.100 2900     1 10.40.102.9.49338     ESTABLISHED


- Desired output to be:
Code:
tcp        0      0  10.80.110.100 2900     1 10.40.104.6 42769     ESTABLISHED
tcp        0      0  10.80.110.100 2900     1 10.40.103.7 38620     ESTABLISHED
tcp        0      0  10.80.110.100 2900     1 10.40.101.8 11764     ESTABLISHED
tcp        0      0  10.80.110.100 2900     1 10.40.102.9 49338     ESTABLISHED


Thank a lot...

Last edited by Scrutinizer; 10-08-2013 at 02:48 PM.. Reason: lime to green (for readability)
# 2  
Old 10-08-2013
If it's a small file, then a very simple ksh version may be sufficient:-
Code:
while read type count1 count2 local port other remote state
do
  echo "$type $count1 $count2 $local $port $other ${remote%.*} ${remote##*.} $other"
done < inputfile > outputfile

You can format the column width with typeset commands if you wish.

The variable substitution with $remote is as follows:-
${remote%.*} says to remove everything from end of $remote at the shortest length that matches a dot, i.e. you get the first four parts.
${remote##*.} says to remove everything from start of $remote at the longest length that matches a dot, i.e. you are left with the last part.
I hope that this helps.


Robin
Liverpool/Blackburn
UK

Last edited by rbatte1; 10-08-2013 at 01:22 PM.. Reason: Detail about variable substitution/slicing
# 3  
Old 10-08-2013
you may try

Code:
$ cat test
tcp        0      0  10.80.110.100 2900     1 10.40.104.6.42769     ESTABLISHED
tcp        0      0  10.80.110.100 2900     1 10.40.103.7.38620     ESTABLISHED
tcp        0      0  10.80.110.100 2900     1 10.40.101.8.11764     ESTABLISHED
tcp        0      0  10.80.110.100 2900     1 10.40.102.9.49338     ESTABLISHED

Code:
awk  -F"." '{for(i=1;i<=NF;i++)printf (i==7)? $i OFS : (i<NF)?$i FS:$i;printf RS}' test

resulting
Code:
tcp        0      0  10.80.110.100 2900     1 10.40.104.6 42769     ESTABLISHED
tcp        0      0  10.80.110.100 2900     1 10.40.103.7 38620     ESTABLISHED
tcp        0      0  10.80.110.100 2900     1 10.40.101.8 11764     ESTABLISHED
tcp        0      0  10.80.110.100 2900     1 10.40.102.9 49338     ESTABLISHED

These 3 Users Gave Thanks to Akshay Hegde For This Post:
# 4  
Old 10-08-2013
Quote:
you may try



Code:
$ cat testtcp 0 0 10.80.110.100 2900 1 10.40.104.6.42769 ESTABLISHEDtcp 0 0 10.80.110.100 2900 1 10.40.103.7.38620 ESTABLISHEDtcp 0 0 10.80.110.100 2900 1 10.40.101.8.11764 ESTABLISHEDtcp 0 0 10.80.110.100 2900 1 10.40.102.9.49338 ESTABLISHED



Code:
awk -F"." '{for(i=1;i<=NF;i++)printf (i==7)? $i OFS : (i<NF)?$i FS:$i;printf RS}' test

resulting


Code:
tcp 0 0 10.80.110.100 2900 1 10.40.104.6 42769 ESTABLISHEDtcp 0 0 10.80.110.100 2900 1 10.40.103.7 38620 ESTABLISHEDtcp 0 0 10.80.110.100 2900 1 10.40.101.8 11764 ESTABLISHEDtcp 0 0 10.80.110.100 2900 1 10.40.102.9 49338 ESTABLISHED

Hi Akshay,

Could you please explain also this. I will be grateful to you.


Thanks,
R. Singh
# 5  
Old 10-08-2013
Quote:
Originally Posted by RavinderSingh13
Hi Akshay,

Could you please explain also this. I will be grateful to you.


Thanks,
R. Singh
FS="." ---> Field separator is dot (.)
for(i=1;i<=NF;i++) ---> start loop from 1st Field to 8th Field
(i==7)? ---> If field is 7th one then print $7 and Output separator (OFS) by default output separator is set to space, else check field is less than 8 (i<NF)?, if yes print column and field separator that is dot(.). if field is greater than 7 then just print column, once loop completes print newline that is RS (Row separator)

Last edited by Akshay Hegde; 10-08-2013 at 02:33 PM..
# 6  
Old 10-08-2013
Quote:
FS="." ---> Field separator is dot (.)
for(i=1;i<=NF;i++) ---> start loop from 1st Field to 8th Field
(i==7)? ---> If field is 7th one then print $7 and Output separator (OFS) by default output separator is set to space, else check field is less than 8 (i<NF)? , if yes print column and field separator that is dot(.) . if field is greater than 7 then just print column, once loop completes print newline that is RS (Row separator)
Hello Akshay,

When code will get the value for 7th column, then I have query if we are setting the OFS to default which is space then how it is putting space at the last
Code:
.(dot)

not between every
Code:
.(dot)



I mean it should be like as

Code:
10 40 104 6 4276 


could please explain?


Thanks,
R. Singh
# 7  
Old 10-08-2013
Another way with sed :
Code:
sed 's/\.\([^.]*\)$/ \1/' file

or
Code:
sed 's/\./ /7' file

These 2 Users Gave Thanks to Scrutinizer 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

Using sed to delete everything after "space"

Hi, I have a lot of string texts which normally should only contain a single float so that I can put this float into a variable. This stings are generated by a grep command out of a large html file. sometimes a value that I want to grep is found more than once, so that the resulting sting... (1 Reply)
Discussion started by: Stefan Willms
1 Replies

2. Shell Programming and Scripting

Awk,sed : change every 2nd field ":" to "|"

Hi Experts, I have a string with colon delimited, want 2nd colon to be changed to a pipe. data: 101:8:43:4:72:14:41:69:85:3:137:4:3:0:4:0:9:3:0:3:12:3: I am trying with sed, but can change only 1 occurance: echo "101:8:43:4:72:14:41:69:85:3:137:4:3:0:4:0:9:3:0:3:12:3:" | sed 's/:/|/2'... (5 Replies)
Discussion started by: rveri
5 Replies

3. Post Here to Contact Site Administrators and Moderators

Suggestion: adding two new groups "sed" and "awk"

Majority of the questions are pertaining file/string parsing w.r.t sed or awk It would be nice to have these two as their own sub category under shell-programming-scripting which can avoid lot of duplicate posts. (1 Reply)
Discussion started by: jville
1 Replies

4. Shell Programming and Scripting

how to use "cut" or "awk" or "sed" to remove a string

logs: "/home/abc/public_html/index.php" "/home/abc/public_html/index.php" "/home/xyz/public_html/index.php" "/home/xyz/public_html/index.php" "/home/xyz/public_html/index.php" how to use "cut" or "awk" or "sed" to get the following result: abc abc xyz xyz xyz (8 Replies)
Discussion started by: timmywong
8 Replies

5. Shell Programming and Scripting

awk command to replace ";" with "|" and ""|" at diferent places in line of file

Hi, I have line in input file as below: 3G_CENTRAL;INDONESIA_(M)_TELKOMSEL;SPECIAL_WORLD_GRP_7_FA_2_TELKOMSEL My expected output for line in the file must be : "1-Radon1-cMOC_deg"|"LDIndex"|"3G_CENTRAL|INDONESIA_(M)_TELKOMSEL"|LAST|"SPECIAL_WORLD_GRP_7_FA_2_TELKOMSEL" Can someone... (7 Replies)
Discussion started by: shis100
7 Replies

6. Shell Programming and Scripting

Simplify Bash Script Using "sed" Or "awk"

Input file: 2 aux003.net3.com error12 6 awn0117.net1.com error13 84 aux008 error14 29 aux001.ha.ux.isd.com error12 209 aux002.vm.ux.isd.com error34 21 alx0027.vm.net2.com error12 227 dux001.net5.com error123 22 us008.dot.net2.com error121 13 us009.net2.com error129Expected Output: 2... (4 Replies)
Discussion started by: sQew
4 Replies

7. Shell Programming and Scripting

Help to change the file with "sed" and "awk"

Hi experts I want your help to change the file format to my wanted version, please give me a hand thanks $cat file install pass make os pass make build kernel failed usb storage pass chane to | *install* | *make os* | *make build kernel* | *usb storage* | | pass | pass... (7 Replies)
Discussion started by: yanglei_fage
7 Replies

8. Shell Programming and Scripting

cat $como_file | awk /^~/'{print $1","$2","$3","$4}' | sed -e 's/~//g'

hi All, cat file_name | awk /^~/'{print $1","$2","$3","$4}' | sed -e 's/~//g' Can this be done by using sed or awk alone (4 Replies)
Discussion started by: harshakusam
4 Replies

9. UNIX for Dummies Questions & Answers

Explain the line "mn_code=`env|grep "..mn"|awk -F"=" '{print $2}'`"

Hi Friends, Can any of you explain me about the below line of code? mn_code=`env|grep "..mn"|awk -F"=" '{print $2}'` Im not able to understand, what exactly it is doing :confused: Any help would be useful for me. Lokesha (4 Replies)
Discussion started by: Lokesha
4 Replies

10. UNIX for Dummies Questions & Answers

Convert "text" to "packed-decimal"?

Is there a way with HP-UX Release 10.20 (but going to HP-UX 11) to convert a regular "text" file to a packed data format (such as is created by a Cobol program)? (2 Replies)
Discussion started by: HuskyJim
2 Replies
Login or Register to Ask a Question