首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >awk:打印前11列(省略最后一列)

awk:打印前11列(省略最后一列)
EN

Stack Overflow用户
提问于 2014-01-08 06:08:34
回答 3查看 636关注 0票数 1

我的CSV文件有12列(制表符分隔),我想打印出前11列。我想出了下面这段awk代码,但它破坏了格式(不再使用制表符分隔符)。我需要一些帮助来维护格式,同时只打印出前11列。感谢您的帮助。

代码语言:javascript
复制
awk '{for(i=1;i<12;i++)printf "%s",$i OFS}'
EN

回答 3

Stack Overflow用户

发布于 2014-01-08 06:14:43

假设您希望在每个输入字段之间有一个单独的制表符,这样的代码应该可以做您想要做的事情。

代码语言:javascript
复制
awk -vOFS='\t' '{NF=NF-1}1' $file

-vOFS='\t'OFS设置为制表符。

NF=NF-1告诉awk该行比开始时少了一个字段,并使其重新计算$0的值。

1模式的默认值是print,因此可以使用任何true值来打印$0

请尝试awk '{NF=NF-1}1' OFS='\t' $file,或者使该awk 'BEGIN{OFS="\t"} {NF=NF-1}1' $file失败以避免-v

票数 2
EN

Stack Overflow用户

发布于 2014-01-08 14:35:40

一些awk变体

代码语言:javascript
复制
awk 'NF-=1' OFS=\\t $file
awk '{NF-=1}1' OFS=\\t $file
awk '{NF-=1}1' OFS="\t" $file
awk -v OFS="\t" '{NF-=1}1' $file
票数 1
EN

Stack Overflow用户

发布于 2014-01-08 21:10:26

如果您的系统上有Ruby

代码语言:javascript
复制
# ruby -ne 'puts $_.split("\t")[0..10].join("\t")' file
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20982974

复制
相关文章

相似问题

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