awk注意事项

  1. 当用awk正则匹配单引号时,需要将'替换成'\'
  2. 赋值语句会返回当前值,例:
    awk 'BEGIN{print (b=3)+1}'
    输出4
  3. 变量无需初始化,若参与数值运算则自动初始化为0,直接打印输出的是空字符串
  4. 利用以上两点可输出文件的奇偶行
    输出奇数行:awk 'i=!i'
    输出偶数行:awk '!(i=!i)'
  5. gsub(r,s,t)直接修改t字符串的内容,返回的是替换的次数
  6. split(s,A,r)的r中若包含\*,需要对他们进行转义
  7. awk无法处理文件中的空字符\x00,遇到时会提前结束,需要事先去除这些字符。可以使用tr命令,tr -d '\0' < infile,注意-d参数后写的是字符的八进制格式,如果写成\x00会对其它字符造成影响。

示例用法:

  • 分组求和:awk '{s[$1] += $2}END{ for(i in s){ print i, s[i] } }' file1 > file2
  • 将文件infile根据某一列的值拆成outfile1和outfile2:awk -F, '{if ($2==1) {print $0 >> "outfile1"} else {print $0 >> "outfile2"}}' infile
  • 将文件按照某列输出,按列值命名:awk -F, '{gsub(/[\/ ]/,"",$1);print $0 > "subdir/"$1}' infile
  • 遍历各列字段:awk '{for(i=1;i<=NF;i++){print $i}}'
  • 分组求平均:awk -F ',' '{r[$3] += $5; l[$3]++} END {for(i in l){print(i,r[i]/l[i]}}' all_result_acr.csv
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值