time awk '{x=substr($0,N+1); gsub(".","*",x); print substr($0,1,N) x}' N=3 file1 > /dev/null
real 0m0.038s
user 0m0.037s
sys 0m0.000s
[..]
And a perl version seems faster that awk:
Code:
time perl -ne 'print substr($_,0,3)."*"x(length()-4)."\n"' file1 >/dev/null
real 0m0.014s
user 0m0.010s
sys 0m0.000s
Regards.
Indeed the perl is faster because of the powerful repetition (x) feature, but it is not entirely correct, since it does not work correctly for string lengths <=2 (spurious newline)
So I used
Code:
$ time perl -nle 'print substr($_,0,3)."*"x(length()-3)' file > /dev/null
real 0m0.016s
user 0m0.012s
sys 0m0.003s
instead.
The only way I could get close, was with mawk :
Code:
$ time mawk -v n=3 '{m=length()-n+1; $0=substr($0,1,3)} m>1{$m=x}1' OFS=\* file > /dev/null
real 0m0.019s
user 0m0.016s
sys 0m0.002s
Which was marginally slower.
Quote:
Originally Posted by DGPickett
Try C:
Code:
#include <stdio.h>
#include <string.h>
int main(){
[..]
Interestingly on OSX 10.10.2 (with LLVM 6.0 compiler) I got:
Code:
$ time ./a.out < file > /dev/null
real 0m0.045s
user 0m0.039s
sys 0m0.002s
On CentOS 6.6 it was fastest though..
Code:
$ time mawk -v n=3 '{m=length()-n+1; $0=substr($0,1,3)} m>1{$m=x}1' OFS=\* file > /dev/null
real 0m0.035s
user 0m0.034s
sys 0m0.001s
$ time perl -nle 'print substr($_,0,3)."*"x(length()-3)' file >/dev/null
real 0m0.026s
user 0m0.022s
sys 0m0.004s
$ time ./a.out < file > /dev/null
real 0m0.021s
user 0m0.019s
sys 0m0.002s
(with gcc 4.4.7)
So which compiler is being used can make quite a difference
Last edited by Scrutinizer; 02-14-2015 at 02:32 AM..
How can I use sed to replace a ctrl character such as 'new line' (\0a) to something else? Or any other good command can do this job?
Thanks,
Hillxy (5 Replies)
Hi all,
Suppose I have a file with the contents below, and I only want to print words %S_ then | sort -u.
------------------------------
The %S_MSG that starts with '%.*s' is too long. Maximum length is %d.
The %S_MSG name '%.*s' contains more than the maximum number of prefixes. The... (5 Replies)
Hi everyone
I have file1 contains:
'7832'
' 8765
6543
I want a sed command that will format as:
'7832' , '8765' , '6543'
I tried
sed -e s/\'//g -e 's/^*//;s/*$//' file1 > file2
sed -e :a -e '$!N; s/\n/ /; ta' file2
which gives: 7832 8765 6543
I need some help to continue with... (5 Replies)
Hi,
I require to replace 2 items:
1. replace start of all lines in a file with ' except the first line
2. replace end of all lines in a file with '||chr( except last line
I am able to do the entire file using
sed -e s/^/\'/g -e s/$/\'\|\|chr\(/g "$file" > newfile.txt
but am not yet able... (0 Replies)
Hi,
I require to replace 2 items:
1. replace start of all lines in a file with ' except the first line
2. replace end of all lines in a file with '||chr( except last line
I am able to do the entire file using
sed -e s/^/\'/g -e s/$/\'\|\|chr\(/g "$file" > newfile.txt
but am not yet... (3 Replies)
Hi,
I'm trying to replace a range of characters by their position in each line by spaces.
I need to replace characters 95 to 145 by spaces in each line.
i tried below but it doesn't work
sed -r "s/^(.{94})(.{51})/\ /" inputfile.txt > outputfile.txt
can someone please help me... (3 Replies)
I have several files in a directory that look like this:
jacket-n r
potential-n -
outcome-n f
reputation-n b
I want to replace the characters in the second column with certain numbers. For instance, I want the letters 'f', 'r' and 'b' in the second column to replaced with 0 and I want the... (1 Reply)
Hi,
I hope you can help me out please?
I need to replace from character 8-16 with AAAAAAAA and the rest should stay the same after character 16
gtwrhtrd11111111rjytwyejtyjejetjyetgeaEHT
wrehrhw22222222hytekutkyukrylryilruilrGEQTH
hrwjyety33333333gtrhwrjrgkreglqeriugn;RUGNEURGU
... (4 Replies)
Hello,
I have some data that looks like the following,
> <SALTDATA> (OVS0199262)
HCl
> <IDNUMBER> (OVS0199262)
OVS0199262
> <SUPPLIER> (OVS0199262)
TimTec
> <EMAIL> (OVS0199262)
info@timtec.net
> <WEBSITE> (OVS0199262)
http://www.timtec.net
I need to remove the data in... (3 Replies)
Hi,
Im using sed on an AIX machine. I am trying to change the 137-139 characters if they are a ' 36'/'000' to a '036'. The positions that need to be changed are fixed.
the source data that I have is$cat v.txt
4000422985400050462239065593606500000007422985707771046154054910075641MC0318AMWAY... (9 Replies)