2017-08-09 174 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

相關問題