如何使用awk处理CSV文件?

简介: 【10月更文挑战第16天】如何使用awk处理CSV文件?

如何使用awk处理CSV文件?

处理CSV文件是awk的一个常见用途,因为CSV(逗号分隔值)格式广泛用于数据存储和交换。以下是使用awk处理CSV文件的一些基本步骤和技巧:

  1. 设置字段分隔符

    • 默认情况下,awk将空白字符(空格或制表符)作为字段分隔符。对于CSV文件,通常使用逗号作为字段分隔符。可以使用-F选项来指定分隔符。例如:
      awk -F, '{print $1, $2}' file.csv
      
      这将打印CSV文件中的第一列和第二列。
  2. 处理引号内的逗号

    • 如果CSV文件中的某个字段包含逗号,该字段通常会被双引号包围。为了正确处理这种情况,可以使用更复杂的正则表达式或awk脚本来解析字段。例如:
      awk -F, '{for(i=1; i<=NF; i++) gsub(/^"|"$/, "", $i); print $1, $2}' file.csv
      
      这个命令会移除每个字段开头和结尾的双引号。
  3. 跳过标题行

    • CSV文件通常包含一个标题行,描述每列的数据。可以使用NR变量(表示当前记录号)来跳过第一行。例如:
      awk -F, 'NR>1 {print $1, $2}' file.csv
      
      这将跳过标题行并打印其余行的第一列和第二列。
  4. 计算列的总和

    • 假设你想计算CSV文件中某一数值列的总和,可以使用累加器模式。例如,计算第三列的总和:
      awk -F, 'NR>1 {sum += $3} END {print sum}' file.csv
      
      NR>1确保跳过标题行,sum += $3累加第三列的值,END {print sum}在处理完所有行后打印总和。
  5. 格式化输出

    • 使用printf函数可以控制输出格式。例如,以固定宽度打印列:
      awk -F, 'NR>1 {printf "%-10s %-10s\n", $1, $2}' file.csv
      
      这将以左对齐的方式打印第一列和第二列,每个字段占10个字符宽。
  6. 筛选特定行

    • 根据条件筛选行。例如,只打印第三列大于100的行:
      awk -F, 'NR>1 && $3 > 100 {print $1, $2, $3}' file.csv
      
  7. 结合其他命令

    • awk可以与其他命令结合使用,形成强大的文本处理管道。例如,先使用grep筛选行,再用awk处理:
      grep "pattern" file.csv | awk -F, '{print $1, $2}'
      

这些技巧可以帮助你有效地使用awk处理CSV文件,进行数据提取、分析和转换。

目录
相关文章
|
存储 缓存 测试技术
CMake String函数:如何巧妙地在cmake中操作字符串
CMake String函数:如何巧妙地在cmake中操作字符串
1507 0
|
存储 算法 Linux
【Linux 应用开发 共享内存】深入理解和实践 ftruncate:共享内存的有效管理
【Linux 应用开发 共享内存】深入理解和实践 ftruncate:共享内存的有效管理
582 5
|
搜索推荐 物联网 PyTorch
Qwen2.5-7B-Instruct Lora 微调
本教程介绍如何基于Transformers和PEFT框架对Qwen2.5-7B-Instruct模型进行LoRA微调。
13279 34
Qwen2.5-7B-Instruct Lora 微调
|
人工智能 文字识别 自然语言处理
Vision Parse:开源的 PDF 转 Markdown 工具,结合视觉语言模型和 OCR,识别文本和表格并保持原格式
Vision Parse 是一款开源的 PDF 转 Markdown 工具,基于视觉语言模型,能够智能识别和提取 PDF 中的文本和表格,并保持原有格式和结构。
1781 19
Vision Parse:开源的 PDF 转 Markdown 工具,结合视觉语言模型和 OCR,识别文本和表格并保持原格式
|
数据采集 人工智能 自然语言处理
万字干货|复杂表格多Agent方案:从LLM洞察、系统性 思考到实践经验总结
笔者结合实践经验以近期在负责的复杂表格智能问答为切入点,结合大模型的哲学三问(“是谁、从哪里来、到哪里去”),穿插阐述自己对大模型的一些理解与判断,以及面向公共云LLM的建设模式思考,并分享软件设计+模型算法结合的一些研发实践经验。
1372 43
|
消息中间件 存储 Java
吃透 RocketMQ 消息中间件,看这篇就够了!
本文详细介绍 RocketMQ 的五大要点、核心特性及应用场景,涵盖高并发业务场景下的消息中间件关键知识点。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
吃透 RocketMQ 消息中间件,看这篇就够了!
|
JSON 前端开发 JavaScript
不会webpack的前端可能是捡来的,万字总结webpack的超入门核心知识
该文章提供了Webpack的基础入门指南,涵盖安装配置、基本使用、加载器(Loaders)、插件(Plugins)的应用,以及如何通过Webpack优化前端项目的打包构建流程。
不会webpack的前端可能是捡来的,万字总结webpack的超入门核心知识
|
Linux KVM 虚拟化
windwos上通过qemu直接开启img、qcow2等格式磁盘镜像(无需转vmdk)
QEMU 是一款开源虚拟化软件,支持多种硬件平台和虚拟化技术,如 KVM 加速。它可以在 Windows、Linux 和 macOS 上运行。本文介绍了 QEMU 的下载、安装、配置虚拟网卡、启动虚拟机、网络通信及快照管理等步骤。通过 QEMU,用户可以轻松创建和管理虚拟机,实现高效的开发和测试环境。
6670 0
windwos上通过qemu直接开启img、qcow2等格式磁盘镜像(无需转vmdk)
|
Ubuntu 网络协议 关系型数据库
|
Perl
awk的BEGIN和END块
awk的BEGIN和END块
501 3