我正在尝试使用awk删除文本文件中的前三个字段。删除前三个字段很容易。但是线路的其余部分被awk搞砸了:分隔符从一个标签变为空格
以下是我的尝试:
head pivot.threeb.tsv | awk 'BEGIN {IFS="\t"} {$1=$2=$3=""; print }'
正确删除前三列。问题是输出结束时,列$ 4 $ 5 $ 6等之间的选项卡转换为空格。
更新:标记为重复的另一个问题是在此时间之后创建的:查看日期。
答案 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}'