-新创建个文件test
uid,phone,name
1,123,小明
2,234,小红
3,123,小小
4,123,dada
5,256,qwqw
6,234,erer
7,3432,zxzx
8,121,zzxzx
9,122,wq
- 打印每一行
awk -F"," '{print $0}' test
- 打印第一列
awk -F"," '{print $1}' test
- 打印分别列加列名
-awk -F"," '{print "uid:"$1"\tphone:"$2"\tname\t"$3 }' test
- - 打印5-8行
awk -F"," '{if(NR<9&&NR>4) print$0}' test
实例二:已知test.txt文件内容为:
[root@Gin scripts]# cat test.txt
I am Poe,my qq:is 33794712
- 请从该文件中过滤出’Poe’字符串与33794712,最后输出的结果为:Poe 33794712(-F"“中是正则表达式,中括号中代表字符包含空格,”,","😊
awk -F"[ ,:]+" '{print $3"\t"$7}' t1.txt
Poe 33794712
- 计算一共有多少列的计算过程
awk 'BEGIN{count=0;print "[start] begin uid count is "count}{count=count+1;print "现在是第",count,"行"}END{print "[end] end uid count is ",count}' test
- 计算文件总字节数
ll | awk 'BEGIN{size=0;print"开始计算size"}{size=size+$5}END{print "End size=",size,"字节"}'
- 多空格符作为间隔的awk
awk -F[[:space:]+] '{print $1,$2,$3}' t1.txt
- 疑问:下面的输出语句只有 123 为什么没有4,5 待研究
-不研究了,是因为$4也是空格,中间三个空格不是按照一个分割符进行切割的 awk -F[[:space:]+] '{print $1,$2,$3,$4}' t1.txt
- 打印test文件的第7行
awk -F"," 'NR==7{print $0}' test
变量名 | 属性 |
---|---|
$0 | 当前行记录 |
$1~$N | 对应行记录 |
FS | 输入分隔符 默认是空格 |
RS | 输入换行符 |
NF | 记录有多少列 |
NR | 已经读出的行数,就是行号 |
OFS | 输出字段分隔符 |
ORS | 输出字段的换行符 |
- 修改test文件内容为
- ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200514114214
- List item
354.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjU5OTQyOQ==,size_16,color_FFFFFF,t_70)
-打印以\n为字段分隔符,空行为行换行符的awk
awk 'BEGIN {FS="\n";RS=""}{print $1,$2,$3}' test
- 选择带有"121"关键字符的行
awk '/121/ {print $0}' test
- awk的替换操作(替换所有数字变成!)
awk 'BEGIN{info="this is replace 12test34";gsub(/[0-9]+/,"!",info);print info}'
- 替换文件中所有的数字变成!感叹号
awk -F"," '{gsub(/[0-9]+/,"!");print $0}' test
- 查找自定义字符串的数字是否存在(有数字输出为match_get,没有输出not found)
awk 'BEGIN{info="this is match123test!";print match(info,/[0-9]+/)?"match_get":"no found";}'
- 找到每一行的正则匹配到的内容(匹配到两个逗号中间的内容)
awk '{match($0,/,(.*?),/,a);print a[1]}' test
- 截取自定义变量的某区间字段,结果是1234
awk 'BEGIN{info="1234567";print substr(info,1,4)}'
- 截取文件中分割的第二列的前两个字符
awk -F"," '{target=substr($2,1,2);print target}' test
- split分割及循环输出所有的坐标及坐标对应的值
awk 'BEGIN{info="this is a test";split(info,tA," ");print length(tA);for(k in tA){print k,tA[k];}}
- 读取test,并以“,”分割成数组,并打印数组的长
awk -F"," '{split($0,target,",");print length(target)}' test
- 查询文件第二列含有某关键字段的信息
-awk -F"\t" '$2 ~/ /{print $2}' error.txt|sort -u
- 对文件第一行的每一个值打印对应坐标
head -1 test.txt |awk -F"," '{for(i=1;i<=NF;i++){print i,$i}}'
- 对文件进行替换双引号操作
cat test.txt | awk -F"," '{print $7"\t"$8}'|sort -u|sed 's/\"//g'
- 对文件进行某两列的去重
cat all_data.txt |awk -F "\t" '!a[$9""$10]++{print}' >ceshi2