2017-08-09 173 views
-1

我有一个制表符分隔的文件,我想打印第一个列的。awk简单的制表符分隔为1到第n列

我宁愿让我的这样那样简单和重复性尽可能的方式:

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$ 

它看起来正常....

发生了什么问题,我该如何避免它?

回答

4

$不在文件中。这是-A标志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命令中的每个,都被字段分隔符替换,最重要的是,您还添加了选项卡。 这里有一个简单的方法,使列制表符分隔:

awk -v OFS='\t' '{print $1, $2, $3}' 
1

由于您的输入制表符分隔,可以使用cut作为一个简单的和可重复的方法:

cut -f 1-3 old.bed 

至于你$问题, janos的完整覆盖范围是his answer

相关问题