如何使用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
我有一个包含几列的数据文件,并且在几个数据点之后有白色 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