My Tech notes: Use of CUT Grep AWK Linux Command Combinations
Subscribe

Unix Documentation

Free Online Unix Training Materials

Lists many links to free Unix training materials.

Pointers and Arrays Materials

Pointers and Arrays materials Explained for C beginners

C FAQ and General Questions C Interview Questions

Powered By

Free XML Skins for Blogger

Powered by Blogger

Friday, November 21, 2008

Use of CUT Grep AWK Linux Command Combinations

Today I learn about power usage of grep cut and awk command;
My requirement was to know on which physical USB port which device is connected,
I can get this information from /proc/bus/usb/devices; which tells me about on which port which device is connected; my udev script will automatically mount the USB device with combination of Manufacturer name and serial number;
Here is the steps how I reached to simple solution instead of coding hundred lines of code.

To search for the SerialNumber in proc file i used
$ grep 'SerialNumber' /proc/bus/usb/devices

was giving me output in "S: SerialNumber=LDVTCGP6" format, I don't need that S: so used pipe;
$ grep 'SerialNumber' /proc/bus/usb/devices | awk '{print $2}'

This removes initial "S:" The output is combination of SerialNumber=LDVTCGP6 lines;
I need to separate each strings with individual values; use cut command from linux.
$ grep 'SerialNumber' /proc/bus/usb/devices | awk '{print $2}' | cut -d= -f2

This gives me "LDVTCGP6" as serial number; I need only for two ports so use tail command.
$ grep 'SerialNumber' /proc/bus/usb/devices | awk '{print $2}' | cut -d= -f2 | tail -2

This gives me only last two values; redirect this to some file like
$ grep 'SerialNumber' /proc/bus/usb/devices | awk '{print $2}' | cut -d= -f2 | tail -2 > /var/usb_port

This file contains now serialnumbers of usb device connected now for same way append values for port in same file;
$ grep 'Port' /proc/bus/usb/devices | awk '{print $5}' | cut -d= -f2 | tail -2 >> /var/usb_port

This way I got serialnumbers and physical ports connected values in one file now I can open this file and manipulate to meet my requirements.
Life is easy with cut,grep and awk commands in linux.

Some more examples to work out.
To print only the second and third lines of a file:
head -3 some.file | tail -2

Cut Command
------------
Divide a file into several parts (columns)
syntax:
cut [-b] [-c] [-f] list [-n] [-d delim] [-s] [file]
You have a file test.txt which has colon(:) seperated data

406378:Sales:Itorre:Jan
031762:Marketing:Nasium:Jim
636496:Research:Ancholie:Mel
396082:Sales:Jucacion:Ed

If you want to print first set of data from each row, you can use cut command as follow:

cut -d":" -f1 test.txt

No comments:

Post a Comment