首页 > 代码库 > awk文本处理工具

awk文本处理工具

awk详细

awk [options] ‘commands‘ files

-F 定义字段分隔符,默认的分隔符是连续的空格或制表符,使用-F参数定义间隔符号,可以使用多个不同的符号做分隔符 -F[:/] 

用$1,$2,$3等的顺序表示files中每行以间隔符号分隔的各列不同域

  awk -F:(:是行内分隔符) “{print $1,$2}” 文件名    #输出匹配的第一段和第二段的内容

NF变量表示当前记录的字段数

  awk -F: “{print $1,NF}” 文件名    输出匹配第一段,和每行的字段数

  awk -F: “{print $1,$NF}” 文件名  输出匹配第一段和最后一段

-v 定义变量并赋值 也可以借用次方式从shell变量中引入

  count = 7

  awk -v x=$count -F: “$1>x{print $3}” 文件名  

 

行定址

NR表示awk读入的行数

  awk -F: “{print $1,NR}” 文件名

  awk -F: “NR==1{print $1,NR}” 文件名  只处理第一行

FNR表示读入行所在文件中的行数

# awk ‘{print NR,FNR,$1}‘ file1  file2
  1 1 aaaaa
  2 2 bbbbb
  3 3 cccccc
  4 1 ddddd
    5 2 eeeee
    6 3 ffffffff

正则定址

正则需要用//包围起来
^ 行首
$ 行尾
. 除了换行符以外的任意单个字符
* 前导字符的零个或多个
.* 所有字符
[] 字符组内的任一字符
[^] 对字符组内的每个字符取反(不匹配字符组内的每个字符)
  ^[^] 非字符组内的字符开头的行
[a-z] 小写字母
[A-Z] 大写字母
[a-Z] 小写和大写字母
[0-9] 数字
\< 单词头 单词一般以空格或特殊字符做分隔,连续的字符串被当做单词
\> 单词尾

awk -F: “/^root/{print $3}” 文件名

awk -F: “$1~/^root/{print $3}” 文件名   以第一个字段来匹配

awk -F: “$1=="root"{print $3}” 文件名   以第一个字段来匹配

awk -F: “$1>2{print $3}” 文件名   以第一个字段来匹配

 

补充

111111111
222222222
333333333
444444444
555555555
aaaaaaaaaa
aaaaaaaaaa
aaaaaaaaaa
aaaaaaaaaa
aaaaaaaaaa
aaaaaaaaaa
aaaaaaaaaa
aaaaaaaaaa
999999999
999999999
999999999
999999999
999999999
999999999
999999999
aaaaaaaaaa
6666666666
7777777777
8888888888
aaaaaaaaaa
aaaaaaaaaa
aaaaaaaaaa
aaaaaaaaaa
9999999999
aaaaaaaaaa
aaaaaaaaaa
aaaaaaaaaa
aaaaaaaaaa

cat a.txt |sort|uniq  -c  #sort排序、uniq去重、-c查看去重了多少行

cut

d指定分隔符

f指定取第几部分

cat a.txt |cut -d: -f1

cat a.txt |cut -d: -f1,3   取第三部分

 

 

du -sh /boot/ 统计文件大小

find /boot   -type f  查找/boot目录下的普通文件

find /boot   -name *.txt  查找/boot目录下的 .txt后缀的文件

find /boot  -size +30M   查找大于30M的文件

find /boot  -size +10M -size -30M   查找大于10M小于30M的文件

grep -rl "root" /test   递归查找/test下包含root的文件名,输出文件名

 

awk文本处理工具