Sourced from http://objectmix.com/awk/26995-retrieve-string-between-parentheses.html
$ cat some_file | gawk '{if (match($0,/\((.*)\)/,f)) print f[1]}' | cut -d ':' -f1 | sort | uniq
The above command will be helpful when reviewing stack trace output from command line to filter out and identify all the referenced .java files listed.
For example:
$ cat stacktrace_1.txt | gawk '{if (match($0,/\((.*)\)/,f)) print f[1]}' | cut -d ':' -f1 | sort | uniq
FilterFileSystem.java
Job.java
JobSubmissionFiles.java
JobSubmitter.java
Native Method
ProcessBuilder.java
RawLocalFileSystem.java
Shell.java
Subject.java
ToolRunner.java
UserGroupInformation.java
Showing posts with label awk. Show all posts
Showing posts with label awk. Show all posts
Tuesday, August 12, 2014
Tuesday, July 8, 2014
Multiply / Sum column data in awk/sed
Sourced from here:
http://unix.stackexchange.com/questions/115998/how-do-i-multiply-and-sum-column-data-using-awk-and-or-sed
Solution 1:
Solution 2:
http://unix.stackexchange.com/questions/115998/how-do-i-multiply-and-sum-column-data-using-awk-and-or-sed
I have several columns of data. I always have the same number of rows (say 5). In the 2nd column, I want to multipy the first value by 5, then the second value by 4, the third value by 3, etc. I then want to sum these values, and divide by the sum of the values in the second column. How would I do this in sed and/or awk?
Example:
4 5 7 1 2 3
5 1 2 3 1 2
4 2 3 6 1 2
3 4 1 6 3 3
2 3 1 2 1 6
Answer:
(5*5 + 4*1 + 3*2 + 2*4 + 1*3)/(5 + 1 + 2 + 4 + 3) = 3.067Solution 1:
Replace 6 with total (number of lines + 1) if needed:
awk '{mult+=$2*(6-NR); sum+=$2;} END {print mult/sum;}' yourfile.txt
Displays:
3.06667Solution 2:
If in case total number of lines are not known
$ cat file
4 5 7 1 2 3
5 1 2 3 1 2
4 2 3 6 1 2
3 4 1 6 3 3
2 3 1 2 1 6
$ awk 'FNR==NR{t = NR+1;next}{mult+=$2*(t-FNR);sum+=$2}
END{print mult/sum}' file{,}
3.06667
Explanation
awk 'FNR == NR{t=NR+1;next}FNR variable --> Current line number in the current fileNR variable-->The total number of lines seen so far
The condition
FNR == NR can only be true while awk is reading the first file of argumentt=NR+1 --> variable t holds line count +1 extra since it's required in our current contextnext--> Stops the processing of the current input record and proceeds with the next input recordmult+=$2*(t-FNR) --> variable mult holds some of (5*(t-FNR) + ..... + 4*1 + 3*2 + 2*4 + 1*3)sum+=$2 --> variable sum holds sum of column2END--> AnEND rule is executed, once, after all the input has been readprint mult/sum --> Finally print mult/sumfile{,} --> you can also file file file but i used shortcut this bash trick you can say, try echo file{,} and echo file{,,} on your terminal.
Subscribe to:
Posts (Atom)