如何将字段 1 拆分为不同的行,但为创建的每个新行保留字段 2

Séb*_*ent 8 awk text-processing columns

输入:

注意:2 列由制表符分隔,常规空格分隔第 2 列中的单词。

1   the mouse is dead
2   hit the wall
3   winter lasts forever
Run Code Online (Sandbox Code Playgroud)

想要的输出:

1   the
1   mouse
1   is
1   dead
2   hit
2   the
2   wall
3   winter
3   lasts
3   forever
Run Code Online (Sandbox Code Playgroud)

这是awk要走的路吗?

ilk*_*chu 13

嗯,第一个字段是$1NF保存行上的字段数,我们可以使用$iwherei是变量访问字段,循环的工作方式几乎就像在 C 中一样。所以:

$ awk '{for (i = 2; i <= NF; i++) printf "%s\t%s\n", $1, $i} ' < blah
1       the
1       mouse
...
Run Code Online (Sandbox Code Playgroud)

(这不区分空格和制表符作为字段分隔符。)


Sté*_*las 5

使用 GNU sed

sed -E 's/^((\S+\s+)\S+)\s+/&\n\2/;P;D'
Run Code Online (Sandbox Code Playgroud)

POSIXsed语法更丑:

s='[[:space:]]\{1,\}' S='[^[:space:]]\{1,\}'
sed "s/^\(\($S$s\)$S\)$s/&\\
\2/;P;D"
Run Code Online (Sandbox Code Playgroud)