删除第一列,然后在awk中保持原始线不变

时间:2013-05-06 14:24:05

标签: shell unix awk

我正在尝试使用awk删除文本文件中的前三个字段。删除前三个字段很容易。但是线路的其余部分被awk搞砸了:分隔符从一个标签变为空格

以下是我的尝试:

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

正确删除前三列。问题是输出结束时,列$ 4 $ 5 $ 6等之间的选项卡转换为空格。

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

4 个答案:

答案 0 :(得分:5)

首先如ED所述,您必须在awk中使用FS作为字段分隔符。 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。

答案 1 :(得分:4)

实际上这可以通过这样一个非常简单的剪切命令来完成:

cut -f4- inFile

答案 2 :(得分:3)

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

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

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

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

答案 3 :(得分:0)

awk '{for (i=4; i<NF; i++) printf $i " "; print $NF}'