【问题标题】:Removing certain columns from a text file [duplicate]从文本文件中删除某些列[重复]
【发布时间】:2014-04-19 14:17:56
【问题描述】:

我有一个如下所示的文本文件:

A   B   C   A   B   C   A   B   C   A   B
G   T   C   A   G   T   C   A   G   T   C
A   B   C   A   B   C   A   B   C   A   B
A   B   C   A   B   C   A   B   C   A   B
A   D   E   A   B   D   E   A   B   D   E
A   B   C   A   B   C   A   B   C   A   B
C   B   D   G   C   B   D   G   C   B   D

有没有办法只提取某些列而保持其他列不变?

例如仅删除第 2 列和第 5 列:

A   C   A   C   A   B   C   A   B
G   C   A   T   C   A   G   T   C
A   C   A   C   A   B   C   A   B
A   C   A   C   A   B   C   A   B
A   E   A   D   E   A   B   D   E
A   C   A   C   A   B   C   A   B
C   D   G   B   D   G   C   B   D

提前致谢。

更新:

使用 awk 找到了这个答案,但这会提取整个“块”列,我只想提取一些。

用于提取第 3 到 5 列的 Awk:

awk -F 'FS' 'BEGIN{FS="\t"}{for (i=1; i<=NF-1; i++) if(i<3 || i>5) {printf $i FS};{print $NF}}' input.txt

【问题讨论】:

  • 常见问题解答。存在各种awk 示例。尝试搜索。
  • 我刚刚使用 awk 检查了答案,但它们只提取列的“块”,我想删除不一定相邻的列。
  • 根据您要打印的列数,您可以使用print $1,$2,$4,$6,…,但如果您不关心输出格式,这可能会很乏味,或者类似$3="";$5="";print $0;

标签: macos bash shell sed awk


【解决方案1】:

在你的情况下,你可以这样做

cat your_file |cut -d ' ' --complement -s -f2,5

其中 ' ' 是分隔符(在您的情况下是空格)

【讨论】:

  • 我收到非法选项错误。我在 OSX 上工作
猜你喜欢
  • 2021-03-13
  • 1970-01-01
  • 2014-03-26
  • 1970-01-01
  • 2022-01-17
  • 1970-01-01
  • 2022-01-25
  • 2016-03-03
  • 1970-01-01
相关资源
最近更新 更多