Saturday, 28 January 2012


cut in unix  is not exactly the same as the cut option in gui based windows. cut is
a text  manipulative command that is widely used in  shell scripting .
You can cut  fields, same as the way you do by using awk,  or cut  a  required number of characters from the lines of a file.

You have to read only a particular column  from a file,use cut with –d option along with  -f.
Suppose the file contains the following content.

/home/khan $ cat  workingTime.txt
    Ist                                       II                                      Break                               III                                     IV
10:00-:11:20am     11:25am-12:30pm          2:30-1:45pm          1:45-3:00pm               3:05-4:30pm
10:00-:11:15am     11:20am-12:40pm          12:40-1:30pm         1:30-2:45pm              2:50-4:20pm
10:00-:11:00am     11:00am-12:00pm          12:00-1:30pm         1:35-3:00pm              3:05-4:15pm
10:00-:11:20am     11:25am-12:30pm          12:30-1:45pm         1:45-3:00pm              3:05-4:30pm
10:00-:11:15am     11:20am-12:25pm           12:25-1:30pm         1:30-2:45pm             2:50-4:20pm
 Five    rows   for    five  working  days
/home/khan $

Note: here there is only one space between each entry in the column. I have used  longer spaces for better visibility.

To get only the timings for  the break, use the following command.
/home/khan $ cut  –f3   –d         workingTime.txt

similarly if the columns in the  file is separated by some other characters such as  , or | or – etc  include them as an argument after –d

Example 2)
suppose  you have  a variable which stores a date in a particular format  and you want to access the month, year and day, use it as shown by the script.
/home/khan $ cat
read b_date

b_yr=`echo $b_date | cut –c5-8`
dt=`echo $b_date|cut –c3-4`
mon=`echo $b_date | cut –c1-2`

case   $mon   in
        01) month=JAN;;
        02) month=FEB;;
        03) month=MAR;;
        04) month=APR;;
        05) month=MAY;;
        06) month=JUN;;
        07) month=JUL;;
        08) month=AUG;;
        09) month=SEP;;
        10) month=OCT;;
        11) month=NOV;;
        12) month=DEC;;
echo “YOU WERE BORN ON  $month  MONTH”

Example 3)
It is needed to display all  the characters starting from nth character, use cut as shown.
/home/khan$ cat  expense.txt

If  you need to fetch the decimal value,
/home/khan$ cut   -c4-  expense.txt

Similarly if you want to
1) cut all starting characters up to 4th character  
2)1st 2 characters then 5 th to 7th character use
cut  -c -4 and 
cut   -c -2,5-7  respectively.

Example 4)
There is sometimes an unusual situation where you want to cut  only  backwards.
i:e you only know that nth field starting from end of a line is fixed and you want to cut the nth character. Here it is done with cut  and  rev command (only in  Aix,Linux. If you do not have rev use this url  to get a c code  for rev and compile and save it in a path defined in your $PATH variable).

Consider a file which contains patterns as shown.
/home/khan$  cat  fool-art-works.lst

You may have to access  the code number and file extension which are fixed to appear as last 2 fields  among all the lines.
Use cut and rev as follows.

/home/khan$  for  line in `cat   fool-art-works.lst `
>echo   “$line”  |   rev |  cut   -f1  -d  “_”   |  rev

You can  further use pipes and cuts to separate number and extension from these line you know how…!!

1 comment: