使用awk或sed删除多列

安德烈克

我有一个数据库,其中包含6037个以空格分隔的列和450行,如下所示:

1807 1452 1598 1 6.655713  A B A B ... 0 
1808 1452 1763 1 9.362033  0 0 A B ... A 
1809 1452 1527 2 6.728534  A B A A ... B 
1810 1452 1367 2 9.4055  A B A A B ... A 
... ... ... ... ... ... ... ... ... ...
1812 1452 1258 1 6.363032  0 0 A B ... B

我想要一个只有前676列的新数据库。

优选地,使用awksed命令的某种形式

甜点

如果文件中的列定界符是单个字符(例如空格),则cut可以轻松做到这一点:

cut -d' ' -f-676 <in >out

这仅打印从第一行到第676行之间用空格分隔的列。

如果您需要例如将每个空白字符都算作定界符,则sed解决方案是:

sed -r 's/\s+\S+//677g' <in >out

这将替换第677位开始的所有列(=至少一个空格字符,然后至少一个非空格字符),不带任何内容。使用字符组,您可以指定所需的任何定界符集,例如“ 4”,“#”和“ K”:

sed -r 's/[4#K]+[^4#K]+//677g' <in >out

对于一种合理的 awk方法,请参考steeldriver的答案,但这是另一个循环遍历各列,并且仅在列FS数<= 676时才打印(用分隔):

awk '{for (i=1;i<=676;i++) {printf (i==1?"":FS)$i}; print ""}' <in >out

对于字符组,必须为输出指定输出字段分隔符,例如for[4#K]"sep"

awk -F'[4#K]' '{for (i=1;i<=676;i++) {printf (i==1?"":"sep")$i}; print ""}' <in >out

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用sed或awk删除模式后的某些字符?

来自分类Dev

使用sed / awk删除多余的行

来自分类Dev

使用sed从CSV删除列

来自分类Dev

使用AWK或SED删除字段的尾部和前导空格

来自分类Dev

使用awk或sed删除基于列值的重复行

来自分类Dev

使用sed或awk从文件中删除功能

来自分类Dev

如何使用AWK或SED删除第一列字符数不等于13的任何行

来自分类Dev

如何使用awk / sed整理无序的列?

来自分类Dev

使用sed或cut或awk删除不需要的文本

来自分类Dev

如何使用sed或awk删除模式后的某些字符?

来自分类Dev

删除csv [awk,sed]中未预期的列中的逗号

来自分类Dev

使用awk / sed更改列

来自分类Dev

如何使用awk / sed整理无序的列?

来自分类Dev

使用SED或AWK将行移至列

来自分类Dev

使用sed从CSV删除列

来自分类Dev

使用bash,awk或sed删除重复的条目

来自分类Dev

使用列-AWK和SED

来自分类Dev

使用sed(或awk)删除图案上方的行范围

来自分类Dev

使用Grep / sed / awk组合从文件中的一行删除模式,模式是另一列

来自分类Dev

如何使用awk或sed从列中删除\ n

来自分类Dev

使用awk,sed等命令从文件中删除字段

来自分类Dev

使用awk / sed从特定字段中删除字符串

来自分类Dev

如何使用sed grep awk删除双字符串

来自分类Dev

使用sed或awk替换列之间的文本

来自分类Dev

使用sed或awk删除文件每个段落中的重复行

来自分类Dev

使用awk或sed从列中删除字符的所有实例

来自分类Dev

使用sed或awk删除模式后的所有内容

来自分类Dev

使用 awk '{printf...' 多列

来自分类Dev

使用 sed/awk 删除分隔文本列的最后一部分