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}'

ただし、この場合、2番目の列は空白であるため、3番目の行などはABC123603ZZPAAAAを出力します。これを回避するにはどうすればよいですか?

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

最後の列を削除する1つの手法は、awkにフィールドが1つ少ないと思わせることです。

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