我有一个大数据(> 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
由于某些原因,最后三个单元格的某些行是空白的。对于这些情况,我会用" 1"替换空白单元格。对于p.value
," NA",对于error
和"不可估量"为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终端。
答案 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
的值来分隔其他字段。