awk 行为不当,其中有些字符串很长(最多 45 个字符)?

awk 行为不当,其中有些字符串很长(最多 45 个字符)?

我想提取以下文件的最后一列和第一列,我将其称为filename.

A 0.400 1.0 1.0 3.0 0.0 1.00 2.0 5.0 1.0 1.00 0.0 0.0 gs100_bs050_rcrs100_rarcinf_core_0400mpc3_df
B 0.400 1.0 1.0 3.0 0.0 0.25 2.0 5.0 1.0 0.25 0.0 1.0 gs100_bs050_rcrs025_rarc100_core_0400mpc3_df
C 0.03021516 4.0 1.0 4.0 0.0 1.75 2.0 5.0 1.0 1.75 -0.5 -0.5 data_c_rh4_rs175_gs10_ra0_b05n_10k

我尝试过awk '{print $NF, " ", $1}' filename,期望获得

gs100_bs050_rcrs100_rarcinf_core_0400mpc3_df A
gs100_bs050_rcrs025_rarc100_core_0400mpc3_df B
data_c_rh4_rs175_gs10_ra0_b05n_10k C

但我却得到了

A0_bs050_rcrs100_rarcinf_core_0400mpc3_df
B0_bs050_rcrs025_rarc100_core_0400mpc3_df
C_c_rh4_rs175_gs10_ra0_b05n_10k

在 Mac 上 ( gawk v 5.0.0) 以及在 Linux/Ubuntu 上每行开头有 3 个额外空格 ( mawk 1.3.3) 相同。我也尝试过awk '{printf("%s %s\n", $NF, $1)}' filename,但是得到了

A100_bs050_rcrs100_rarcinf_core_0400mpc3_df
 B100_bs050_rcrs025_rarc100_core_0400mpc3_df
 Cta_c_rh4_rs175_gs10_ra0_b05n_10k

在 Mac 上。由于最后一列的最长字符串有 45 个字符长。所以我然后尝试了:
awk '{printf("%-50s %s\n", $NF, $1)}' filename,但这返回了

     As050_rcrs100_rarcinf_core_0400mpc3_df
      Bs050_rcrs025_rarc100_core_0400mpc3_df
                Cgs10_ra0_b05n_10k

我的示例符合 awk 每个字段 1024 个字符和 100 个字段的限制。这可能是一个错误吗awk

相关内容