本文目录导读:

在Awk脚本中处理列数据有很多实用技巧,这里帮你总结几个最常用的:
字段分隔符灵活设置
# 默认是空白字符(空格/Tab)
cat file.txt | awk '{print $1, $2}'
# 指定分隔符 - 逗号
awk -F',' '{print $1, $3}' data.csv
# 多个分隔符
awk -F'[:,]' '{print $1, $2}' file.txt
# 使用正则作为分隔符
awk -F'[[:space:]]+' '{print $NF}' file.txt # 取最后一列
列重排与组合
# 交换前两列
awk '{print $2, $1, $3}'
# 拼接列
awk '{print $1 "_" $2, $3}'
# 特定条件筛选列
awk 'NR>1 && $3>100 {print $1, $3}' data.txt # 跳过表头,筛选第3列>100的
空值处理技巧
# 用默认值替换空列
awk '{$2 = $2 ? $2 : "N/A"; print}' data.txt
# 跳过空行
awk 'NF>0' file.txt
# 检查某列是否为空
awk '$3=="" {print "第3列为空:", $0}'
数值计算与统计
# 列求和
awk '{sum+=$3} END {print "总和:", sum}'
# 多列统计
awk '{col1+=$1; col2+=$2; count++}
END {print "平均值:", col1/count, col2/count}'
# 百分比计算
awk '{total+=$2; arr[NR]=$2}
END {for(i in arr) printf "%s %.2f%%\n", $1, arr[i]/total*100}'
字符串处理
# 截取前几个字符
awk '{print substr($2, 1, 3)}' # 截取第2列前3字符
# 查找替换
awk '{$1=gsub(/old/, "new", $1); print}'
# 分割字符串
awk '{split($1, arr, "-"); print arr[1], arr[2]}'
条件过滤与格式化
# 多条件筛选
awk '$3 > 50 && $4 ~ /error/ {print}'
# 格式化输出
awk '{printf "%-20s %8.2f %3d\n", $1, $2, $3}'
# 行号范围
awk 'NR>=10 && NR<=20 {print}'
多文件处理
# 合并多个文件
awk 'FNR==1 && NR!=1 {next} {print}' file1.csv file2.csv
# 按特定列关联
awk 'NR==FNR {a[$1]=$2; next} $1 in a {print $0, a[$1]}' file1 file2
复杂场景示例
# 删除重复行(基于某一列)
awk '!seen[$1]++' data.txt
# 分组聚合
awk '{count[$1]++; sum[$1]+=$2}
END {for(k in count) print k, count[k], sum[k]}'
# 条件判断时跳过空列
awk '$3 != "" {print $1, $2 * $3}'
实用小贴士:
- NF变量:当前行字段数,
$NF表示最后一列 - NR变量:当前行号
- FNR变量:当前文件的行号
- OFS变量:输出字段分隔符,默认为空格
- ORS变量:输出记录分隔符,默认为换行
快速调试技巧:
# 查看列数和内容
awk '{print NR": "$0}' file.txt | head -5
# 打印所有列
awk '{for(i=1;i<=NF;i++) print NR".第"i"列:", $i}'
这些技巧组合使用,基本能应对90%的列处理场景,遇到具体需求,先用小样测试规则,再应用到全量数据。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播