Changes

Jump to navigation Jump to search
4,549 bytes added ,  09:05, 16 November 2018
Line 1: Line 1: −
Comand line text processing
+
= Comand line text processing =
 
Examples:
 
Examples:
 
<source lang="bash">
 
<source lang="bash">
 
awk -F, '{print NR, length($0)}' filename.txt  #print line number and line length
 
awk -F, '{print NR, length($0)}' filename.txt  #print line number and line length
 
awk '{print FILENAME " " length($0)}' */PRF* | uniq
 
awk '{print FILENAME " " length($0)}' */PRF* | uniq
awk 'BEGIN { FS = "," } ; { print $2 }'  #Specify separator ','
+
 
 +
awk 'BEGIN { FS = "," } ; { print $2 }'  #Specify separator ',' can be done with -F too.
 +
awk -F"," '$2~/^ABC$/' file  #Find in a csv second field = ABC
 
</source>
 
</source>
 +
 +
== Print from 3rd field till end ==
 +
<source lang="bash">
 +
awk '{              \
 +
      for (i = 3; i <= NF; i++) {  \
 +
          printf("%s ", $i);        \
 +
      }                            \
 +
      printf("\n") }'
 +
</source>
 +
== Print with condition ==
 +
awk '{if ($3 =="" || $4 == "" || $5 == "") print "Some score for the student",$1,"is missing";'}' student-marks
 +
 +
== Print if value ==
 +
<nowiki>$ echo "a b c d" | awk '($4){print "yes"}'
 +
yes
 +
$ echo "a b c d" | awk '($14){print "yes"}' ## prints nothing, no $14
 +
$ echo "a b c 0" | awk '($4){print "yes"}' ## prints nothing, $4 is 0</nowiki>
 +
 +
== Print columns as lines ==
 +
ls -lR | awk '{for(x=1;$x;++x) print $x}'
 +
<nowiki>awk '{for(x=1;$x;x++)print $x}'
 +
          ___ __ ___
 +
          |  |  |
 +
          |  |  |-----> increment x by 1 at the end of each loop.
 +
          |  |--------> run the loop as long as there is a field number x
 +
          |------------> initialize x to 1</nowiki>
 +
== Print from line x to line y ==
 +
<nowiki>I suggest the sed solution, but for the sake of completeness,
 +
 +
awk 'NR >= 57890000 && NR <= 57890010' /path/to/file
 +
To cut out after the last line:
 +
 +
awk 'NR < 57890000 { next } { print } NR == 57890010 { exit }' /path/to/file</nowiki>
 +
 +
== Cheatsheet ==
 +
<nowiki>
 +
Basics I
 +
$1
 +
Reference first column
 +
awk '/pattern/ {action}' file↵
 +
Execute action for matched pattern 'pattern' on file 'file'
 +
;
 +
Char to separate two actions
 +
print
 +
Print current record line
 +
$0
 +
Reference current record line
 +
Variables I
 +
$2
 +
Reference second column
 +
FS
 +
Field separator of input file (default whitespace)
 +
NF
 +
Number of fields in current record
 +
NR
 +
Line number of the current record
 +
Basics II
 +
^
 +
Match beginning of field
 +
~
 +
Match opterator
 +
!~
 +
Do not match operator
 +
-F
 +
Command line option to specify input field delimiter
 +
BEGIN
 +
Denotes block executed once at start
 +
END
 +
Denotes block executed once at end
 +
str1 str2
 +
Concat str1 and str2
 +
One-Line Exercises I
 +
awk '{print $1}' file↵
 +
Print first field for each record in file
 +
awk '/regex/' file↵
 +
Print only lines that match regex in file
 +
awk '!/regex/' file↵
 +
Print only lines that do not match regex in file
 +
awk '$2 == "foo"' file↵
 +
Print any line where field 2 is equal to "foo" in file
 +
awk '$2 != "foo"' file↵
 +
Print lines where field 2 is NOT equal to "foo" in file
 +
awk '$1 ~ /regex/' file↵
 +
Print line if field 1 matches regex in file
 +
awk '$1 !~ /regex/' file↵
 +
Print line if field 1 does NOT match regex in file
 +
Variables II
 +
FILENAME
 +
Reference current input file
 +
FNR
 +
Reference number of the current record relative to current input file
 +
OFS
 +
Field separator of the outputted data (default whitespace)
 +
ORS
 +
Record separator of the outputted data (default newline)
 +
RS
 +
Record separator of input file (default newline)
 +
Variables III
 +
CONVFMT
 +
Conversion format used when converting numbers (default %.6g)
 +
SUBSEP
 +
Separates multiple subscripts (default 034)
 +
OFMT
 +
Output format for numbers (default %.6g)
 +
ARGC
 +
Argument count, assignable
 +
ARGV
 +
Argument array, assignable
 +
ENVIRON
 +
Array of environment variables
 +
Functions I
 +
index(s,t)
 +
Position in string s where string t occurs, 0 if not found
 +
length(s)
 +
Length of string s (or $0 if no arg)
 +
rand
 +
Random number between 0 and 1
 +
substr(s,index,len)
 +
Return len-char substring of s that begins at index (counted from 1)
 +
srand
 +
Set seed for rand and return previous seed
 +
int(x)
 +
Truncate x to integer value
 +
Functions II
 +
split(s,a,fs)
 +
Split string s into array a split by fs, returning length of a
 +
match(s,r)
 +
Position in string s where regex r occurs, or 0 if not found
 +
sub(r,t,s)
 +
Substitute t for first occurrence of regex r in string s (or $0 if s not given)
 +
gsub(r,t,s)
 +
Substitute t for all occurrences of regex r in string s
 +
Functions III
 +
system(cmd)
 +
Execute cmd and return exit status
 +
tolower(s)
 +
String s to lowercase
 +
toupper(s)
 +
String s to uppercase
 +
getline
 +
Set $0 to next input record from current input file.
 +
One-Line Exercises II
 +
awk 'NR!=1{print $1}' file↵
 +
Print first field for each record in file excluding the first record
 +
awk 'END{print NR}' file↵
 +
Count lines in file
 +
awk '/foo/{n++}; END {print n+0}' file↵
 +
Print total number of lines that contain foo
 +
awk '{total=total+NF};END{print total}' file↵
 +
Print total number of fields in all lines
 +
awk '/regex/{getline;print}' file↵
 +
Print line immediately after regex, but not line containing regex in file
 +
awk 'length > 32' file↵
 +
Print lines with more than 32 characters in file
 +
awk 'NR==12' file↵
 +
Print line number 12 of file</nowiki>

Navigation menu