User Tools

Site Tools


awk:awk_patterns

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
awk:awk_patterns [2020/05/04 23:16] – created peterawk:awk_patterns [2022/06/13 09:51] (current) – [Match using Multiple Patterns] peter
Line 1: Line 1:
 ====== AWK - AWK Patterns ====== ====== AWK - AWK Patterns ======
 +
 +Assuming a file exists with the following contents:
 +
 +<file>
 +10   Peter     Terence   Roux        45
 +11   Virginia  Genevieve  Roux        45
 +12   Felix     Devon     Roux         5
 +13   David     Bruce     Stevenson   48
 +14   Bob       James     Smith       16
 +48   Adam      Winter    Ridley      23
 +</file>
 +
 +----
  
 ===== Matching Patterns ===== ===== Matching Patterns =====
  
-To only print out lines which match a specific search criteria, issue the following command:+To only print out lines which **match** a specific search criteria:
  
-<code bash>+<code awk>
 awk '/45/ {print $2,$4}' test.txt awk '/45/ {print $2,$4}' test.txt
 </code> </code>
  
-which will display something like:+returns:
  
 <code> <code>
Line 16: Line 29:
 </code> </code>
  
-This only prints out the lines from the file which contained the number 45.+<WRAP info> 
 +**NOTE:**  This only prints out the lines from the file which contained the number 45. 
 +</WRAP> 
  
 ---- ----
Line 22: Line 38:
 ===== Multi-line Output with Patterns ===== ===== Multi-line Output with Patterns =====
  
-To output onto multiple lines, issue the following command:+To output onto multiple lines:
  
-<code bash>+<code awk>
 awk '/45/ {print $2,$3,$4 ; print $1, $5}' test.txt awk '/45/ {print $2,$3,$4 ; print $1, $5}' test.txt
 </code> </code>
  
-which will display something like:+returns:
  
 <code> <code>
 Peter Terence Roux Peter Terence Roux
 10 45 10 45
-Virginia Genevive Roux+Virginia Genevieve Roux
 11 45 11 45
 </code> </code>
  
-Again, this only prints out the lines from the file which contained the number 45.+<WRAP info> 
 +**NOTE:**  This only prints out the lines from the file which contained the number 45.
  
-But also prints out a 2nd line because of the use of the semicolon.+  * But also prints out a 2nd line because of the use of the semicolon.
  
-A semicolon does not have to be used to allow using multiple commands.  For instance issue the following command instead:+</WRAP>
  
-<code bash>+<WRAP info> 
 +**NOTE:**  A semicolon does not have to be used to allow using multiple commands. 
 + 
 +For instance issue the following command instead: 
 + 
 +<code awk>
 awk '/45/ {print $2,$3,$4} {print $1, $5}' test.txt awk '/45/ {print $2,$3,$4} {print $1, $5}' test.txt
 </code> </code>
  
-which will display something like:+returns:
  
 <code> <code>
 Peter Terence Roux Peter Terence Roux
 10 45 10 45
-Virginia Genevive Roux+Virginia Genevieve Roux
 11 45 11 45
 12 5 12 5
Line 62: Line 84:
 This time an altogether different result is produced, than when a semicolon was used. This time an altogether different result is produced, than when a semicolon was used.
  
-The reason for this is that the pattern that is used, /45/ is only applied to the command immediately following it.  In this example, this was only against fields $2, $3 and $4.+The reason for this is that the pattern that is used, **/45/** is only applied to the command immediately following it.  In this example, this was only against fields $2, $3 and $4.
  
 The 2nd print statement is not affected by the pattern and would apply to all fields in the input file. The 2nd print statement is not affected by the pattern and would apply to all fields in the input file.
 +</WRAP>
  
 ---- ----
Line 72: Line 95:
 To search for more than one pattern match at a time, issue the following command: To search for more than one pattern match at a time, issue the following command:
  
-<code bash>+<code awk>
 awk '/45|48/ {print $2,$4}' test.txt awk '/45|48/ {print $2,$4}' test.txt
 </code> </code>
  
-which will display something like:+returns:
  
 <code> <code>
Line 85: Line 108:
 </code> </code>
  
-The pipe symbol | is used to provide multiple patterns.+<WRAP info> 
 +**NOTE:**  The pipe symbol **|** is used to provide multiple patterns. 
 +</WRAP> 
  
 ---- ----
Line 91: Line 117:
 ===== Match against specific field ===== ===== Match against specific field =====
  
-To restrict the match to only a specific field, issue the following command:+To restrict the match to only a specific field:
  
-<code bash+<code awk
-awk '$5 ~ /45|48/ {print $2,$4}' /sharewiz/awk/test.txt+awk '$5 ~ /45|48/ {print $2,$4}' test.txt
 </code> </code>
  
-which will display something like:+returns:
  
 <code> <code>
Line 105: Line 131:
 </code> </code>
  
-Note that this time Adam Ridley is not displayed even though the source file has a 48 as part of his record.+<WRAP info> 
 +**NOTE:**  Adam Ridley is not displayed even though the source file has a 48 as part of his record.
  
-The tilda ~ ties the match to a specific field.+  * The tilda ~ ties the match to a specific field. 
 + 
 +</WRAP>
  
 ---- ----
Line 113: Line 142:
 ===== Match not against a specific field ===== ===== Match not against a specific field =====
  
-To have the match be the opposite of matching a specific field, issue the following command:+To have the match be the opposite of matching a specific field:
  
-<code bash>+<code awk>
 awk '$5 !~ /45|48/ {print $2,$4}' test.txt awk '$5 !~ /45|48/ {print $2,$4}' test.txt
 </code> </code>
  
-which will display something like:+returns:
  
 <code> <code>
Line 127: Line 156:
 </code> </code>
  
-The **exclamation mark** and **tilda** (!~) together informs to not match to a specific field.+<WRAP info> 
 +**NOTE:**  The **exclamation mark** and **tilda** (!~) together informs to not match to a specific field. 
 +</WRAP> 
  
 ---- ----
Line 133: Line 165:
 ===== Match in a Range ===== ===== Match in a Range =====
  
-To have the match be the opposite of matching a specific field, issue the following command:+To have the match be the opposite of matching a specific field:
  
-<code bash+<code awk
-awk '/4[2-8]/ {print $2,$4}' /sharewiz/awk/test.txt+awk '/4[2-8]/ {print $2,$4}' test.txt
 </code> </code>
  
-which will display something like:+returns:
  
 <code> <code>
Line 148: Line 180:
 </code> </code>
  
-This finds all fields with values between 42 and 48.+<WRAP info> 
 +**NOTE:**  This finds all fields with values between 42 and 48. 
 +</WRAP> 
  
 ---- ----
  
  
awk/awk_patterns.1588634174.txt.gz · Last modified: 2020/07/15 09:30 (external edit)

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki