This document provides an introduction and overview of common Unix commands including find, grep, sort, uniq, diff, and awk. It includes over 30 examples of using each command to find, search, filter, compare, and manipulate text-based files. The examples cover basic and advanced uses of each command, such as recursively searching directories with find, searching for patterns with grep, sorting and de-duplicating lines with sort and uniq, comparing differences between files with diff, and selecting, calculating, and transforming data with awk.
Introduction to Unix - POS420Unix Lab Exercise Week 3 BTo.docx
1. Introduction to Unix - POS420
Unix Lab Exercise Week 3 B
Topics :
find
grep
sort
uniq
diff
awk
1. find command
1. To find all files havingan extension of .h in the directory
/usr/include
$ find /usr/include -name *.h -print
2. To find all directories recursively (all sub directories also)
$ find . -type d -print
3. To print all the files in the current directory and its
subdirectories
$ find . -print
2. 4. To show files that have not been modified in the last day in
/tmp directory
$ find /tmp -type f -mtime +1
5. To remove the above files
$ find /tmp -type f -mtime +1 -exec rm -f {} ;
or
$ find /tmp -type f -mtime +1 -ok rm -f {} ;
6. When you come out of vacation and If you forget where the
file you were editing, find is very handy (like windows find).
Let us search for the file "first.c" from root directory.
$ find / -name first.c -print
2. grep command
1. Get all the lines with the string -Smith” from the
phonebook:
$ grep Smith phonebook
2. Get all the lines with the string “ Tom Smith” from the
phonebook:
$ grep “Tom Smith” phonebook
3. Get the number of times the string “ksh” occurs in the file
/etc/passwd :
$ grep -c ksh /etc/passwd
4. Get the all the lines having the string “Ken” in all the files
3. in the directory :
$ grep Ken *
5. Search whether your friend tom has logged in :
$ who | grep tom
6. Get all the lines in the file intro not having the word
“Unix” :
$ grep -v Unix intro
7. Search lower case or upper case pattern "Unix".
$ grep -i Unix intro
8. The -l option gives a list of files having the pattern "Unix".
$ grep -l Unix intro
9. Search for the characters the or The:
$ grep ' [tT]he intro
10. '^' character denotes the beginning of a line and '$' is the
end of a line. Search for lines that start with the word 'The'.
$ grep ^The Unix intro
11. Search for lines that end in .pic
$ grep '.pic$' filename --The escape
sequence is used for the dot as . is a wild character.
12. Search for containing five-character patterns that start with
a capital letter and end with a digit
$ grep '[A-Z]...[0-9]' filename
13. Th e-n option is used to display the line number that
matched the pattern.
$ grep -n Unix filename
3. sort command
You might have created the file phonebook from Item No 1
above.
1. Sort the file phonebook:
$ sort phonebook
2. Sort the file phonebook by second column :
$ sort +1 phonebook
3. Sort the file by second column but distinct names:
$ sort +1 phonebook | uniq
4. Sort the file and redirect the output to another file called
“sortedusers” :
4. $ sort phonebook > sortedusers
5. Display the file on the screen , sort and count lines
$ cat phonebook | sort | wc -l
6. Find duplicate entries in /etc/passwd :
$ sort /etc/passwd | uniq -d
4. uniq command
Create a file "myfile" with the following lines
This is first repeated line
Is it the second repeated line ?
This is first repeated line
Is it the second repeated line ?
Last not repeated line
1. Show all lines, with number of repeats counted
$ uniq -c myfile
1 This is first repeated line
1 Is it the second repeated line ?
1 This is first repeated line
1 Is it the second repeated line ?
1 Last not repeated line
Oops, it is now showing correct output, why ?
We need to sort the file before we use uniq command.
Two ways we can do, one by redirecting the output to another
file and then do 'uniq'
1st way :
$ sort myfile > sorted_myfile
$ uniq -d sorted_myfile
2 Is it the second repeated line ?
1 Last not repeated line
2 This is first repeated line
2nd way :
$ sort myfile | uniq -c
2 Is it the second repeated line ?
1 Last not repeated line
2 This is first repeated line
5. 2. Show only duplicated lines
$ sort myfile | uniq -d
Is it the second repeated line ?
This is first repeated line
OR
$ uniq -d sorted_myfile
Is it the second repeated line ?
This is first repeated line
3. Show only unique lines in infile
$ sort myfile | uniq -u
Last not repeated line
OR
$ uniq -u sorted_myfile
Last not repeated line
5. diff command
If you have not created the files file1, file2, please create with
vi command and enter the following contents.
$ vi file1
wendy
ttyp0 Aug 3 18:24 (100.0.0.100)
alexx
ttyp1 Aug 31 14:34 (prokopev203.info)
newuser
ttyp2 Aug 23 23:20 (200.100.56.201)
john
ttyp3 Sep 1 08:05 (jatt.iitb.com)
smithr
ttyp4 Sep 1 09:18 (mnet.net.edu)
root
ttyp5 Aug 9 20:34 (gray.cyberspace.com)
santose
ttyp6 Sep 1 09:54 (www.optimus.com)
sandy
ttyp9 Sep 1 09:36 (140.10.00.00)
jyothika
6. ttypa Sep 1 09:50 (200.159.180.15)
$ vi file2
Wendy
ttyp0 Aug 3 18:24 (100.0.0.100)
alexx
ttyp1 Aug 31 14:34 (prokopev203.info)
newuser
ttyp2 Aug 23 23:20 (200.100.56.201)
John
ttyp3 Sep 1 08:05 (jatt.iitb.com)
smithr
ttyp4 Sep 1 09:18 (mnet.net.edu)
root
ttyp5 Aug 9 20:34 (gray.cyberspace.com)
santose
ttyp6 Sep 1 09:54 (www.optimus.com)
Sandy
ttyp9 Sep 1 09:36 (140.10.00.00)
jyothika
ttypa Sep 1 09:50 (200.159.180.15)
The lines in the above files looks like same, but diff can find
the differences.
$ diff file1 file2
1c1
< wendy
ttyp0 Aug 3 18:24 (100.0.0.100)
---
> Wendy
ttyp0 Aug 3 18:24 (100.0.0.100)
4c4
< john
ttyp3 Sep 1 08:05 (jatt.iitb.com)
7. ---
> John
ttyp3 Sep 1 08:05 (jatt.iitb.com)
8c8
< sandy
ttyp9 Sep 1 09:36 (140.10.00.00)
---
> Sandy
ttyp9 Sep 1 09:36 (140.10.00.00)
6. awk command
I introduce awk here as it is a powerful tool as well as easy to
learn once we know what awk stands for.
(This part of the lab is optional, but I suggest every one to
practice awk commands).
The awk is a programming language designed to search for,
match patterns, and perform actions on files. awk programs are
generally quite small, and are interpreted. This makes it a good
language for prototyping.
THE STRUCTURE OF AN AWK PROGRAM
awk scans input lines one after the other, searching each line to
see if it matches a set of patterns or conditions specified in the
awk program.
For each pattern, an action is specified. The action is performed
when the pattern matches that of the input line.
Thus, an awk program consists of a number of patterns and
8. associated actions. Actions are enclosed using curly braces, and
separated using semi-colons.
pattern { action }
pattern { action }
Here are some examples on awk.
1. Create a file emp.data with the following data
$ vi emp.dat
Beth
4.00
0
Dan
3.75
0
Kathy
4.00
10
Mark
5.00
20
Mary
5.50
22
Susie
4.25
18
2. Print the name and pay for everyone who worked
$ awk '$3 > 0 { print $1, $2 * $3 }' emp.dat
3. Print the name of those employees who did not work
$ awk '$3 == 0 { print $1 }' emp.dat
9. 4. Print each line with the pattern match $3 == 0
$ awk '$3 == 0' emp.dat
5. Print an action with no pattern
$ awk '{ print $1 }' emp.dat
6. Error example, this will give error and redirect error to stdout
also
$ awk '$3 == 0 [ print $1 }' emp.dat 2>&1
7. Print every line of input,
$ awk '{ print }' emp.dat
8. Same as above
$ awk '{ print $0 }' emp.dat
9. Printing certain fields
$ awk '{ print $1, $3 }' emp.dat
10. Print the number of fields
$ awk '{ print NF, $1, $NF }' emp.dat
11. Computing and printing
$ awk '{ print $1, $2 * $3 }' emp.dat
12 . Printing line numbers
$ awk '{ print NR, $0 }' emp.dat
13. Putting text in the output
$ awk '{ print "total pay for", $1, "is", $2 * $3 }' emp.dat
14. Using printf to print total pay for every employee
$ awk '{ printf("total pay for %s, is $%.2fn", $1, $2 * $3) }'
emp.dat
Or
10. $ awk '{ printf("%-8s $%6.2fn", $1, $2 * $3 ) }' emp.dat
15. Print all the data sorted in order of increasing pay
$ awk '{ printf("%6.2f %sn", $2 * $3, $0 ) }' emp.dat
16. Print all the data sorted in order of increasing pay web fix
$ awk ' { printf("%6.2ft%st%6.2ft%dn", $2 * $3, $1, $2, $3)
} ‘ emp.dat | sort
17. Selection by comparison
$ awk '$2 >= 5 ‘ emp.dat
18. Selection by computation
$ awk ' $2 * $3 > 50 { printf ("$%.2f for %sn", $2 * $3, $1) }
‘ emp.dat
19. Selection by text content
$ awk ' $1 == "Susie" ' emp.dat
20 .Selection by text content
$ awk ' /Susie/ ' emp.dat
21. Print those lines where $2 is at least 4 or $3 is at least 20
$ awk ' $2 >= 4 || $3 >= 20 ' emp.dat
22 . This program prints and input line twice if it satisfies both
conditions
$ awk ' $2 >= 4; $3 >= 20 ' emp.dat
or
$ awk ' !($2 < 4 && $3 < 20) ' emp.dat
23. Print the total number of input lines
$ awk '{ }END { print NR }' emp.dat
24. Print the tenth input line
$ awk '{if (NR == 10) { print } }' emp.dat
11. 25. Print the last field of every input line
$ awk '{ print $NF }' emp.dat
27. Print the last field of the last input line
$ awk '{ field = $NF } END { print field }' emp.dat
28. Print every input line in which the last field is more than 4
$ awk '{if (NF > 4) { print } }' emp.dat
29. Print every line in which the last field is more than 4
$ awk '{ if ($NF > 4) { print } }' emp.dat
30. Print the total number of fields in all input lines
$ awk '{ nf = nf + NF } END { print nf }' emp.dat
31. Print the total number of lines that contain Beth
$ awk '{ if (/Beth/) { nlines = nlines + 1 } } END { print nlines
}' emp.dat
32 .Print the largest first field and the line that contains it
(assumes some $1 is positive)
$ awk '{ if ($1 > max) { max = $1; maxline = $0 } } END {
print max, maxline }' emp.dat
33. Print every line that has at least one field
$ awk '{ if (NF > 0) { print } }' emp.dat
34. Print every line longer than 80 characters
$ awk '{ if (length($0) > 80) { print } }' emp.dat
35. Print number of fields in every line followed by the line
itself
$ awk '{ print NF, $0 }' emp.dat
36. Print the first two fields, in opposite order, of every line
12. awk '{ print $2, $1 }' emp.dat
37. Exchange the first two fields of every line and then print the
line
$ awk '{ temp = $1; $1 = $2; $2 = temp; print }' emp.dat
38. Print every line with the first field replaced by the line
number
$ awk '{ $1 = NR; print }' emp.dat
39. Print every line after erasing the second field
$ awk '{ $2 = ""; print }' emp.dat
Syam Tangirala
University of Phoenix Online Faculty
[email protected]
732-397-4997(CEL)