[英]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
和管道輸出awk
到column -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.