cut是一个选取命令,就是将一段数据经过分析,取出我们想要的。一般来说,选取信息通常是针对“行”来进行分析的,并不是整篇信息分析的

cut  [-bn] [file] 或 cut [-c] [file]  或  cut [-df] [file]

ut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段写至标准输出。
如果不指定 File 参数,cut 命令将读取标准输入。必须指定 -b、-c 或 -f 标志之一。

主要参数
-b :
以字节为单位进行分割。这些字节位置将忽略多字节字符边界,除非也指定了 -n 标志。
-c :以字符为单位进行分割。
-d :自定义分隔符,默认为制表符。
-f :与-d一起使用,指定显示哪个区域。
-n :取消分割多字节字符。仅和 -b 标志一起使用。如果字符的最后一个字节落在由 -b 标志的 List 参数指示的<br />范围之内,该字符将被写出;否则,该字符将被排除。

cut命令主要是接受三个定位方法:

第一,字节(bytes),用选项-b

第二,字符(characters),用选项-c

第三,域(fields),用选项-f

-b支持形如3-5的写法,而且多个定位之间用逗号隔开就成了

who|cut -b 3-5,8

cat /etc/passwd|head -n 5|cut -d : -f 1

用-d来设置间隔符为冒号,然后用-f来设置我要取的是第一个域,再按回车,所有的用户名就都列出来了

 

      awk

   awk '$1 * $2 >100 '   file  
   awk '$2 >5 && $2<=15'  file


2、awk '{print NR,NF,$1,$NF,}' file     显示文件file的当前记录号、域数和每一行的第一个和最后一个域。 
   awk '/101/ {print $1,$2 + 10}' file       显示文件file的匹配行的第一、二个域加10。 
   awk '/101/ {print $1$2}'  file 
   awk '/101/ {print $1 $2}' file       显示文件file的匹配行的第一、二个域,但显示时域中间没有分隔符。


3、df | awk '$4>1000000 '         通过管道符获得输入,如:显示第4个域满足条件的行。

   awk -F $Sep '{print $1}'  file   按照环境变量Sep的值做为分隔符。    
   awk -F '[ :\t|]' '{print $1}' file   按照正则表达式的值做为分隔符,这里代表空格、:、TAB、|同时做为分隔符。 
   awk -F '[][]'    '{print $1}' file   按照正则表达式的值做为分隔符,这里代表[、]

\047代表单引号。 
{print $1,$2}                      --因为没有模式控制,打印每一行的前两个域。


6、awk '$1 ~ /101/ {print $1}' file         显示文件中第一个域匹配101的行(记录)。


9、awk '$1 * $2 >100 {print $1}' file         显示文件中第一个域匹配101的行(记录)。


10、awk '{$1 == 'Chi' {$3 = 'China'; print}' file        找到匹配行后先将第3个域替换后再显示该行(记录)。 
    awk '{$7 %= 3; print $7}'  file           将第7域被3除,并将余数赋给第7域再打印。


11、awk '/tom/ {wage=$2+$3; printf wage}' file          找到匹配行后为变量wage赋值并打印该变量。

    通过next在某条件时跳过该行,对下一行执行操作。 


14、awk '{ print FILENAME,$0 }' file1 file2 file3>fileall              把file1、file2、file3的文件内容全部写到fileall中,格式为 
    打印文件并前置文件名。

getline d; print d}'         通过管道把date的执行结果送给getline,并赋给变量d,然后打印。 

        } 

}'

===============================

    $awk 'BEGIN{total=0}{total+=$4}END{print total}' a.txt   -----对a.txt文件的第四个域进行求和!

  • $ awk '/^(no|so)/' test      -----打印所有以模式no或so开头的行。

  • $ awk '/^[ns]/{print $1}' test       -----如果记录以n或s开头,就打印这个记录。

  • $ awk '$1 ~/[0-9][0-9]$/(print $1}' test         -----如果第一个域以两个数字结束就打印这个记录。

  • $ awk '$1 == 100 || $2 < 50' test      -----如果第一个或等于100或者第二个域小于50,则打印该行。

  • $ awk '$1 != 10' test    -----如果第一个域不等于10就打印该行。

  • $ awk '/test/{print $1 + 10}' test  -----如果记录包含正则表达式test,则第一个域加10并打印出来。

  • $ awk '{print ($1 > 5 ? "ok "$1: "error"$1)}' test   -----如果第一个域大于5则打印问号后面的表达式值,否则打印冒号后面的表达式值。

  • $ awk '/^root/,/^mysql/' test        ----打印以正则表达式root开头的记录到以正则表达式mysql开头的记录范围内的所有记录。如果找到一个新的正则表达式root开头的记录,则继续打印直到下一个以正则表达式mysql开头的记录为止,或到文件末尾。

相关文章: