6

我正在尝试使用 awk 删除文本文件中的前三个字段。删除前三个字段很容易。但是该行的其余部分被 awk 搞砸了:分隔符从制表符更改为空格

这是我尝试过的:

head pivot.threeb.tsv | awk 'BEGIN {IFS="\t"} {$1=$2=$3=""; print }' 

前三列已正确删除。问题是输出最终将 $4 $5 $6 等列之间的选项卡转换为空格。

更新:被标记为重复的另一个问题是在这个问题之后创建的:查看日期。

4

4 回答 4

5

首先正如 ED 评论的那样,您必须FS在 awk 中用作字段分隔符。 tab成为space您的输出,因为您没有定义OFS.

awk 'BEGIN{FS=OFS="\t"}{$1=$2=$3="";print}' file

这将删除前 3 个字段,并保留其余文本“不变”(您将看到前 3 个选项卡)。在输出中<tab>也会保留。

awk 'BEGIN{FS=OFS="\t"}{print $4,$5,$6}' file

将输出没有前导空格/制表符。但是如果您有 500 列,则必须循环执行,或者使用sub函数或考虑其他工具,例如剪切。

于 2013-05-06T15:09:44.860 回答
5

实际上,这可以通过一个非常简单的 cut 命令来完成,如下所示:

cut -f4- inFile
于 2013-05-06T15:10:47.033 回答
3

如果您不希望更改字段分隔sed,请改为删除前 3 列:

sed -r 's/(\S+\s+){3}//' file

要将更改存储回文件,您可以使用以下-i选项:

sed -ri 's/(\S+\s+){3}//' file
于 2013-05-06T14:36:07.603 回答
0
awk '{for (i=4; i<NF; i++) printf $i " "; print $NF}'
于 2014-05-16T17:55:49.347 回答