如何使用awk将带有空格的列转换为多行

how to convert column with whitespace into multiple rows using awk

我有一个包含几列的数据文件,并且在几个数据点之后有白色 space。 我想将第一列转换为多行(将 whitespace 之后的列转换为行).

例如数据文件A.dat


    2    1  
   11    1  
   15    2  
   24    2  

    3    1  
   12    1  
   16    2  
   25    2  

    4    1  
   13    1  
   17    2  
   26    2  


使用以下命令我可以将第一列转换为行

awk '{print }' A.dat | awk 'BEGIN { ORS = " " } { print }'

这是上面命令的输出

2 11 15 24  3 12 16 25  4 13 17 26

要求

我想要这样的输出

this is row: 2 11 15 24  
this is row: 3 12 16 25  
this is row: 4 13 17 26

是否可以将列转换为行,并在列前面加上“this is row” awk 或任何其他方式。我对其他方法了解不多。

这可能是您想要做的:

awk '
    NF        { row = row " " ; next }
    row != "" { print "this is row:" row; row="" }
    END       { if (row != "") print "this is row:" row }
' A.dat

这假定一个空行结束该行,non-blank 行开始一个新行。

或者,使用 sed:

sed -e 's/[[:blank:]]*\([^[:blank:]]*\).*//' \
    -e '/./{;H;$!d;}'                          \
    -e 'x;/^$/d;y/\n/ /;s/^/this is row:/'     \
A.dat