$ add="20010db885a3000000008a2e03707334"
$ echo $add
20010db885a3000000008a2e03707334
Required output: Insert a colon ':' after every 4 characters in the above line.
So the output required:
2001:0db8:85a3:0000:0000:8a2e:0370:7334
Using awk:
$ echo $add | awk -F "" '
{for(i=1;i<=NF;i++){printf("%s%s",$i,i%4?"":":")}}'|awk '{sub(/:$/,"")};1'
Note: Mind the use of "" as the field separator.
Using sed:
$ echo $add | sed 's/..../&:/g;s/:$//'
Related post:
- Break a line into multiple lines using awk and sed
8 comments:
field sepearation with "" doesn't work with NON-GNU awk.
below code should work with all types of awk.
echo $add | awk '{for(i=1;i<=length($0);i+=4){printf("%s:",substr($0,i,4))}}'|awk '{sub(/:$/,"")};1'
@Mahesh, thanks. I never knew that. Thanks for the one liner.
hi i got a question. i try to use this but what happens if i try to insert ":" in the text not by 4 in 4. i try to do it by 5 then 8 an the 10 in order or other number o characters
@wecbxxx, do you mean this ?
$ echo $add | sed 's/...../&:/g;s/:$//'
20010:db885:a3000:00000:8a2e0:37073:34
Please let me know if your query was different; thanks
Hello Sir!
I have a text line like this:
20100131142315 Constanta 0.0869
I want to look like this:
2010 01 31 14:23:15 0.0869
So please help me.
Thank you very much in advance
George
@Geo Ghe, thanks for the question. You can use awk substr function for this purpose, something like:
$ echo "20100131142315 Constanta 0.0869" | awk '{
one=substr($1,1,4)
two=substr($1,5,2)
three=substr($1,7,2)
four=substr($1,9,2)
five=substr($1,11,2)
six=substr($1,13,2)
printf ("%s %s %s %s:%s:%s %s\n", one, two, three, four, five, six, $NF)
}'
Output:
2010 01 31 14:23:15 0.0869
You can refer to this post of my blog http://unstableme.blogspot.in/2009/11/convert-fixed-length-file-to-csv-awk.html
hope this helps.
echo $add | awk ' gsub("....","&:") '
> Required output: Insert a colon ':' after every 4 characters in the line...
Some methods to place a ':' char every 4 chars in a line:
1. echo "$add" | perl -ple '$_=join ":", unpack "(A4)*"'
2. echo "$add" | perl -ple 's/(.{4})(?=.{1,4})/$1:/g'
#assuming no whitespace in input
3. set X $(echo "$add" | sed -e 's/.\{4\}/&\n/g'); shift ;
(IFS=":"; echo "$*")
4.
echo "$add" |
sed -e '
s/^/\n/
:loop
s/\n.\{4\}/&:\n/
s/\n//
/\n.\{4\}./bloop
s/\n//
'
Post a Comment