3

我有一个 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,因为在这种情况下,第二列是空白的。我该如何解决这个问题?

4

3 回答 3

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
于 2012-12-20T10:36:26.170 回答
1

您可以使用 sed 代替:

echo ... | sed 's/\(A[^ ]*[\t ]*\)\([^ \t]*[0-9][^ \t]*\)*.*/\1 \2/'
于 2012-12-20T10:31:58.127 回答
0

删除最后一列的一种技术是让 awk 认为少了 1 个字段:

awk -v OFS='\t' '{NF--; print}'
于 2012-12-20T15:02:58.887 回答