簡體   English   中英

需要使用 AWK 以相同的順序打印列

[英]Need to print the columns in same order using AWK

我有一個文件,它由兩個或多個空格分隔,如下所示:

r_q01     smip_sc_rq0_t   r_uq02  
r_q02     super_path77/dfpp_tcdxa1_t   umc3  
r_q02     super_path3/dfppoi_tcdxa1_t   r_q01  
r_q03     super_0/cbo_bqibif0_t   ntb0  
r_q0367     super_top_0/nbio_nbif0_t   nbif4  

我想以相同的順序打印列,我嘗試了以下代碼:

#!/bin/bash
awk -F'  +' '{print $1 "        " $2 "                                                      " $3}' file.txt

我的輸出:

r_q01        smip_sc_rq0_t                                                      r_uq02
r_q02        super_path77/dfpp_tcdxa1_t                                                      umc3
r_q02        super_path3/dfppoi_tcdxa1_t                                                      r_q01
r_q03        super_0/cbo_bqibif0_t                                                      ntb0
r_q0367        super_top_0/nbio_nbif0_t                                                      nbif4

實際輸出:

r_q01        smip_sc_rq0_t                                                    r_uq02
r_q02        super_path77/dfpp_tcdxa1_t                                       umc3
r_q02        super_path3/dfppoi_tcdxa1_t                                      r_q01
r_q03        super_0/cbo_bqibif0_t                                            ntb0
r_q0367       super_top_0/nbio_nbif0_t                                        nbif4

如何修復我的代碼以獲得實際輸出。

使用選項卡作為OFS和管道輸出awkcolumn -t以獲得表格輸出:

awk -F ' {2,}' -v OFS='\t' '{$1=$1} 1' file | column -t
r_q01    smip_sc_rq0_t                r_uq02
r_q02    super_path77/dfpp_tcdxa1_t   umc3
r_q02    super_path3/dfppoi_tcdxa1_t  r_q01
r_q03    super_0/cbo_bqibif0_t        ntb0
r_q0367  super_top_0/nbio_nbif0_t     nbif4

如果您只想讓您的字段對齊,請嘗試使用printf設置字段寬度的左對齊,例如 -

$: awk '{ printf "%-10s%-32s%s\n", $1,$2,$3 }' test
r_q01     smip_sc_rq0_t                   r_uq02
r_q02     super_path77/dfpp_tcdxa1_t      umc3
r_q02     super_path3/dfppoi_tcdxa1_t     r_q01
r_q03     super_0/cbo_bqibif0_t           ntb0
r_q0367   super_top_0/nbio_nbif0_t        nbif4

我的字段寬度為 10、32,最后一個字段不變; 調整到您的需求。 %后的破折號左對齊。

添加通用解決方案,其中不硬編碼空格數。 這將計算第一個和第二個字段元素的最大長度,然后相應地填充第一個和第二個字段之后的空間。 這將等於 1st、2nd 和 3rd 字段之間的空間。

awk '
FNR==NR{
  first=(first>=length($1)?first:length($1))
  second=(second>=length($2)?second:length($2))
  next
}
{
  diff1=first-length($1)-1
  $1=sprintf("%-"first"s", $1)
  diff2=second-length($2)-1
  $2=sprintf("%-"second"s", $2)
  diff1=diff2=0
}
1
'  Input_file Input_file

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM