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
嗯,第一个字段是$1
,NF
保存行上的字段数,我们可以使用$i
wherei
是变量访问字段,循环的工作方式几乎就像在 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)
(这不区分空格和制表符作为字段分隔符。)
使用 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)