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的文件名,输出文件名