awk简单制表符分隔1到第n列

时间:2017-08-09 23:31:06

标签: awk cat

我有一个制表符分隔的文件,我想要打印。的第一列。

我希望尽可能保持简单和可重复的方式:

awk -F" " '{print $1,"\t" ,$2, "\t", $3}' old.bed > new.bed

但是当我尝试对新文件进行进一步分析时,我收到一条错误消息,指出该文件的格式是意外的......

我用以下方法检查文件的内容:

cat -A new.bed | more

chr1     3000870     3000918$
chr1     3000870     3000918$
chr1     3000872     3000920$
chr1     3000872     3000920$
chr1     3000872     3000920$

看起来很正常......

出了什么问题,我该如何避免呢?

2 个答案:

答案 0 :(得分:4)

$不在文件中。它是-A的{​​{1}}标志,将其添加到显示中。来自cat的相关部分:

man cat

只需删除 -A, --show-all equivalent to -vET -E, --show-ends display $ at end of each line 标记,-A将不再显示。

此外,我不确定$命令是否完全符合您的预期。 输出实际上不是awk, 但是col1 tab col2 tab col3。 这是因为col1 space tab space col2 space tab space col3命令中的每个,都被字段分隔符替换,除此之外,您还要添加制表符。 这是一种将列标签分开的简单方法:

print

答案 1 :(得分:1)

由于您的输入是制表符分隔的,因此您可以使用cut作为一种简单且可重现的方法:

cut -f 1-3 old.bed

至于您的$问题,janos已完全涵盖{{3}}。