首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用于处理CSV或TSV文件第一行的awk或sed帮助

用于处理CSV或TSV文件第一行的awk或sed帮助
EN

Stack Overflow用户
提问于 2013-07-20 17:07:43
回答 4查看 834关注 0票数 3

我在摆弄awk,因为我认为用这个工具来咀嚼标签分隔或csv文件的标题要简单得多。

我有两种类型的文件(逗号或制表符分隔),我要做的就是修改标题(NR =1)以:

  1. 降低了所有单词的字数
  2. 用每个字段名的下划线替换任何空格。例如。将癌变类型改为*cancer_type*

癌症类型,组装版本,染色体,染色体起始,染色体末端

到目前为止,我所做的就是列出第一行

awk 'NR == 1‘test2.csv

我真是不知所措。无论如何,在进行一些下游修改之前,我可能会运行这个脚本(sed或awk)。

任何帮助(或指点我一个好的教程/一行)将是非常感谢的。

编辑

嗨,我应该编辑来澄清这一点。我将从一个文件开始,以相同的文件结束,但头被更改。

我可以得到两个版本的文件。

The CSV

癌症类型,组装版本,染色体,染色体起始,染色体末端

后:

cancer_type,assembly_version,染色体,chromosome_start,chromosome_end

和TSV

癌症类型组装版染色体开始染色体末端

后:

cancer_type\t assembly_version\t染色体\t chromosome_start\t chromosome_end

话虽如此,我认为各种方法几乎都奏效了。

编辑2操作系统是os 10.7.+

EN

回答 4

Stack Overflow用户

发布于 2013-07-20 18:05:58

如果您只想修改标题并按原样打印其余的行,那么在GNU awk中尝试如下所示

代码语言:javascript
运行
复制
awk 'BEGIN{FS=OFS=","}NR==1{$0=tolower($0);gsub(/\y \y/,"_",$0)}1' csv 
票数 2
EN

Stack Overflow用户

发布于 2013-07-20 19:55:56

如果我理解得很好,OP想要替换原始文件的头,而不仅仅是将结果打印到控制台。

一开始,我试图用awk来解决这个问题,因为我更了解它。但是awk没有内置的编辑功能,因此需要一些bash解决方案:

代码语言:javascript
运行
复制
# Unsafe hack
#{ rm infile; awk 'NR==1{...}1' >infile;} <infile
#Ed Morton's correction
awk 'NR==1{...}1' infile >tmp && mv tmp infile

这是可行的,但是它为rm命令使用了一个额外的rm。最好是使用内部编辑。sed珀尔支持此特性。使用perl有点过分,所以我修正了卡普塔sed解决方案:

代码语言:javascript
运行
复制
sed -i '1{s/\b \b/_/g;s/[[:upper:]]/\L&/g;}' infile

以前的婴儿:

代码语言:javascript
运行
复制
Cancer Type, Assembly Version, Chromosome, Chromosome start, Chromosome end
One 1,Two 2

在以下之后的婴儿:

代码语言:javascript
运行
复制
cancer_type, assembly_version, chromosome, chromosome_start, chromosome_end
One 1,Two 2
票数 2
EN

Stack Overflow用户

发布于 2013-07-20 17:24:40

也许我不完全理解你的问题,但据我所知,这应该能解决这个问题:

代码语言:javascript
运行
复制
head -1 test2.csv | sed -e 's/\(.*\)/\L\1/' -e 's/ /_/g' > tmp.txt
tail -n +2 test2.csv >> tmp.txt
  • head选择第一行
  • 第一个sed选项使所有事情都变得更小写。
  • 第二个sed选项将所有空格转换为下划线
  • tail打印从第2行开始的所有内容

tmp.txt现在包含完整的结果。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17764585

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档