Sponsored Content
Top Forums Shell Programming and Scripting How to get index values for multiple matches in the same line with awk? Post 302949631 by Don Cragun on Tuesday 14th of July 2015 05:19:27 AM
Old 07-14-2015
You could also try something like:
Code:
#!/bin/ksh
printf '%s\n' 'bob alice robert alice' 'aaaa bbbb aaaa' | awk -v s="$1" '
{       d = ""
        for(i = 1; x = index(substr($0, i), s); i = i + x + length(s) - 1) {
                printf("%s%d", d, i + x - 1)
                d = ":"
        }
        print ""
}'

If you want to try this on a Solaris/SunOS system, change awk to /usr/xpg4/bin/awk.

If you save this in a file named tester and make it executable, then various invocations show how it works:
Code:
$ ./tester alice
5:18

$ ./tester a
5:18
1:2:3:4:11:12:13:14
$ ./tester "b a"
3
9
$ ./tester b
1:3:13
6:7:8:9
$ ./tester aa

1:3:11:13
$

This User Gave Thanks to Don Cragun For This Post:
 

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Does Sed Search/Replace Work For Multiple Matches On The Same Line?

Hello, I would like to delete all the footnotes in all my htm files. Hence, I have to delete the whole font tag pairs, i.e. deleting everything between the begin/end font tags. I create a testfile, of which data parts of all four lines are the same except for the number of font tag pairs,... (3 Replies)
Discussion started by: cibalo
3 Replies

2. Shell Programming and Scripting

matching multiple values in awk

How will you change the 5th column in the data file with the value in the second column in the error_correction.txt file. You have to match an extra variable, column 3 of the error_correction file with column 6 of the data.txt file. data.txt: vgr,bugatti veron,,3.5,Maybe,6,.......,ax2,....... (0 Replies)
Discussion started by: VGR
0 Replies

3. Shell Programming and Scripting

Sort from start index and end index in line

Hi All, I have a file (FileNames.txt) which contains the following data in it. $ cat FileNames.txt MYFILE17XXX208Sep191307.csv MYFILE19XXX208Sep192124.csv MYFILE20XXX208Sep192418.csv MYFILE22XXX208Sep193234.csv MYFILE21XXX208Sep193018.csv MYFILE24XXX208Sep194053.csv... (5 Replies)
Discussion started by: krish_indus
5 Replies

4. Shell Programming and Scripting

Finding index values

I have an array XOFFS of size N. I have VDISTMIN and VDISTMAX. I want to find the beginning and and index in XOFFS such that values are within Example Let XOFFS = (10 20 30 40 50) If VDISTMIN = -20 and VDISTMAX = 20 Then ISTR = 1 and IEND = 2 as XOFFS through XOFFS fall within the... (2 Replies)
Discussion started by: kristinu
2 Replies

5. Shell Programming and Scripting

Command line arguments with multiple values

how can I pass multiple values from command line arguments example script.sh -arg1 op1 -arg2 op1 op2 op3 (2 Replies)
Discussion started by: nsk
2 Replies

6. Shell Programming and Scripting

Display all the matches lines in one line using awk

Please can you let me know how to print all the matching lines from a file in one single line using awk. Thanks I have the following data in the input file data1 voice2 voice1 speech1 data2 data3 ... ... voice4 speech2 data4 and the output should be as follows data1 data2... (4 Replies)
Discussion started by: Sudhakar333
4 Replies

7. Shell Programming and Scripting

awk to print the line that matches and the next if line is wrapped

I have a file and when I match the word "initiators" in the first column I need to be able to print the rest of the columns in that row. This is fine for the most part but on occasion the "initiators" line gets wrapped to the next line. Here is a sample of the file. caw-enabled ... (3 Replies)
Discussion started by: kieranfoley
3 Replies

8. Shell Programming and Scripting

Print line if values in fields matches number and text

datafile: 2017-03-24 10:26:22.098566|5|'No Route for Sndr:RETEK RMS 00040 /ZZ Appl:PF Func:PD Txn:832 Group Cntr:None ISA CntlNr:None Ver:003050 '|'2'|'PFI'|'-'|'EAI_ED_DeleteAll'|'EAI_ED'|NULL|NULL|NULL|139050594|ActivityLog| 2017-03-27 02:50:02.028706|5|'No Route for... (7 Replies)
Discussion started by: SkySmart
7 Replies

9. Shell Programming and Scripting

awk Index to get position matches pattern

Input data as below (filetest.txt): 1|22 JAN Minimum Bal 20.00 | SAT 2|09 FEB Extract bal 168.00BR | REM 3|MIN BAL | LEX Output should be: ( If there is Date & Month in 2nd field of Input file, It should be seperated else blank. If There is Decimal OR Decimal & Currency in last of the 2nd... (7 Replies)
Discussion started by: JSKOBS
7 Replies

10. Shell Programming and Scripting

Trying to use awk to check values and multiple

I am trying to use AWK to read a file, comma delimited, and check each field to see if it has a suffix of - (dash , minus sign) if so then I want to either move the minus sign the the beginning of the field or take the numeric portion of the field and multiply it by negative 1 to get the field... (9 Replies)
Discussion started by: ziggy6
9 Replies
Statistics::Test::Sequence(3pm) 			User Contributed Perl Documentation			   Statistics::Test::Sequence(3pm)

NAME
Statistics::Test::Sequence - Sequence correlation test for random numbers SYNOPSIS
use Statistics::Test::Sequence; my $tester = Statistics::Test::Sequence->new(); $tester->set_data( [map {rand()} 1..1000000] ); my ($metric, $actual_freq, $expected_freq) = $tester->test(); use Data::Dumper; print "$metric "; print "Frequencies: "; print Dumper $actual_freq; print "Expected frequencies: "; print Dumper $expected_freq; DESCRIPTION
This module implements a sequence correlation test for random number generators. It shows pairwise correlation between subsequent random numbers. The algorithm is as follows: (Following Blobel. Citation in SEE ALSO section.) o Given "N+1" random numbers "u_j". o For all "j", compare "u_j" with "u_j+1". If "u_j" is greater then "u_j+1", assign a 0-Bit to the number. Otherwise, assign a 1-Bit. o Find all sequences of equal Bits. For every sequence, increment a counter for the length "k" of that sequence. (Regardless of whether it's a sequence of 1's or 0's.) o For uncorrelated random numbers, the number of sequences N(k) of length "k" in the set of "N+1" random numbers is expected to be: N(k) = 2*((k^2+3*k+1)*N - (k^3+3*k^2-k-4)) / (k+3)! METHODS
new Creates a new random number tester. set_data Sets the random numbers to operate on. First argument must be either an array reference to an array of random numbers or a code reference. If the first argument is a code reference, the second argument must be an integer "n". The code reference is called "n"-times and its return values are used as random numbers. The code reference semantics are particularily useful if you do not want to store all random numbers in memory at the same time. You can write a subroutine that, for example, generates and returns batches of 100 random numbers so no more than 101 of these numbers will be in memory at the same time. Note that if you return 100 numbers at once and pass in "n=50", you will have a sequence of 5000 random numbers. test Runs the sequence test on the data that was previously set using "set_data". Returns three items: The first is the root mean square of the bin residuals divided by the number of random numbers. It could be used as a measure for the quality of the random number generator and should be as close to zero as possible. A better metric is to compare the following two return values. The second return value is a reference to the array of frequencies. An example is in order here. Generating one million random numbers, I get: [0, 416765, 181078, 56318, 11486, 1056, 150] This means there were no sequences of length 0 (obvious), 416765 sequences of length 1, etc. There were no sequences of length 7 or greater. This example is a bad random number generator! (It's a linear congruent generator with "(a*x_i+c)%m" and "a=421", "c=64773", "m=259200", and "x_0=4711"). The third return value is similar in nature to the second in that it is a reference to an array containing sequence length frequencies. This one, however, contains the frequencies that would be expected for the given number of random numbers, were they uncorrelated. The number of bins has the maximum length of an occurring sequence as an upper limit. In the given example, you would get: (Dumped with Data::Dumper) $VAR1 = [ '0', '416666.75', '183333.1', '52777.64722222222222222222222222222222222', '11507.89523809523809523809523809523809524', '2033.72068452380952380952380952380952381', '303.1287808641975308641975308641975308642', # ... ]; Note that where I put in a "# ...", you would really see a couple more lines of numbers until the numbers go below an expected frequency of 0.1. For "n=1000000" and "k=7", you get about 39 sequences, "k=8" is expected to be found 4-5 times, etc. SUBROUTINES
expected_frequency Returns the expected frequency of the sequence length "k" in a set of "n" random numbers assuming uncorrelated random numbers. Returns this as a Math::BigFloat. Expects "k" and "n" as arguments. This subroutine is memoized. (See Memoize.) faculty Computes the factulty of the first argument recursively as a Math::BigFloat. This subroutine is memoized. (See Memoize.) SEE ALSO
Math::BigFloat, Memoize, Params::Util Random number generators: Math::Random::MT, Math::Random, Math::Random::OO, Math::TrulyRandom, "/dev/random" where available The algorithm was taken from: (German) Blobel, V., and Lohrmann, E. Statistische und numerische Methoden der Datenanalyse. Stuttgart, Leipzig: Teubner, 1998 AUTHOR
Steffen Mueller, <smueller@cpan.org> COPYRIGHT AND LICENSE
Copyright (C) 2007 by Steffen Mueller This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.6 or, at your option, any later version of Perl 5 you may have available. perl v5.10.0 2007-01-05 Statistics::Test::Sequence(3pm)
All times are GMT -4. The time now is 02:55 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy