2015-06-05 60 views
1

我有一個bigdata(> 20G)空白細胞與不同的值/符號:這種格式替換擊

chr snp beta sebeta f.stat p.value error warning 
1 x1 1  1.1  1.5 
1 x2 2  1.2  1.6  0.1 NA  NA 
1 x3 3  1.3  1.7  0.2 NA  NA 
1 x4 4  1.4  1.8  0.3 NA  NA 

對於一些原因,一些行內最後的三個單元爲空白。對於這些情況,我會用012代替p.value的「1」,代替error的「NA」和代替warning的「不可計算」。我想知道如何在BASH中實現此類功能,例如:

chr snp beta sebeta f.stat p.value error warning 
1 x1 1  1.1  1.5  1  NA  NOT ESTIMABLE 
1 x2 2  1.2  1.6  0.1 NA  NA 
1 x3 3  1.3  1.7  0.2 NA  NA 
1 x4 4  1.4  1.8  0.3 NA  NA 

我的平臺是Mac OS X 10.9.5 Terminal。

+0

是的,字段是固定的,它們是製表符分隔的。 –

回答

1

我會去像這樣的東西:

awk -v OFS='\t' '{ if (NF==5) print $0, 1, "NA", "NOT ESTIMABLE"; else print }' file 

如果字段數爲5,添加列,否則打印線原樣。我已將輸出字段分隔符OFS設置爲製表符,以便輸出中的每一列都由製表符分隔。

實現相同的輸出的稍短的方法是這樣的:

awk -F'\t' 'NF == 5 { $0 = $0 FS 1 FS "NA" FS "NOT ESTIMABLE" }1' file 

這增加了額外的字段,以線的時候掃描場數爲5,1在端部是一種常見的速記其導致awk打印每一行。此方法假定輸入中的每個字段都由製表符分隔,並使用值FS來分隔其他字段。