当列有空时,awk应对

时间:2012-12-20 10:23:45

标签: linux awk

我有一个foreach循环的输出格式:

ABC123603LP    44Bq    AAAA       
ABC123603P     3BU     AAAA       
ABC123603ZZP           AAAA       
ABC123604DP    3BU     BBBB     
ABC123604LP    44Bq    BBBB      
ABC123605AP    4q      CCCC    
ABC123605DP    33BGU   CCCC    
ABC123606AP    35Bjq   DDDD     
ABC123606DP    4B      DDDD

由此我希望用

将第1列和第2列打印到终端
echo ... | awk '{print $1, $2}'

然而第三行和其他人打印ABC123603ZZP AAAA,因为在这种情况下第二列是空白的。我该如何解决这个问题?

3 个答案:

答案 0 :(得分:2)

打印前检查字段数:

$ awk 'BEGIN {OFS="\t"}{ if (NF==2)  print $1; else print $1, $2}' file
ABC123603LP     44Bq
ABC123603P      3BU
ABC123603ZZP
ABC123604DP     3BU
ABC123604LP     44Bq
ABC123605AP     4q
ABC123605DP     33BGU
ABC123606AP     35Bjq
ABC123606DP     4B

答案 1 :(得分:1)

您可以改用sed:

echo ... | sed 's/\(A[^ ]*[\t ]*\)\([^ \t]*[0-9][^ \t]*\)*.*/\1 \2/'

答案 2 :(得分:0)

删除最后一列的一种方法是让awk认为减少1个字段:

awk -v OFS='\t' '{NF--; print}'