我正在尝试使用 awk 删除文本文件中的前三个字段。删除前三个字段很容易。但是该行的其余部分被 awk 搞砸了:分隔符从制表符更改为空格
这是我尝试过的:
head pivot.threeb.tsv | awk 'BEGIN {IFS="\t"} {$1=$2=$3=""; print }'
前三列已正确删除。问题是输出最终将 $4 $5 $6 等列之间的选项卡转换为空格。
更新:被标记为重复的另一个问题是在这个问题之后创建的:查看日期。
首先正如 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
函数或考虑其他工具,例如剪切。
实际上,这可以通过一个非常简单的 cut 命令来完成,如下所示:
cut -f4- inFile
如果您不希望更改字段分隔sed
,请改为删除前 3 列:
sed -r 's/(\S+\s+){3}//' file
要将更改存储回文件,您可以使用以下-i
选项:
sed -ri 's/(\S+\s+){3}//' file
awk '{for (i=4; i<NF; i++) printf $i " "; print $NF}'