如何将文本拆分为行并打印其相应的值?

如何将文本拆分为行并打印其相应的值?

我想将文本拆分为行并打印其值,例如,更改此:

YLB; YLR; YLS (tab) 30

进入这个:

YLB (tab) 30
YLR (tab) 30
YLS (tab) 30

答案1

使用awk

awk 'BEGIN {FS="[; \t]+"; OFS="\t"} {for (i=1; i<NF; i++) print $i, $NF}'

前任。

$ echo 'YLB; YLR; YLS     30' | awk 'BEGIN {FS="[; \t]+"; OFS="\t"} {for (i=1; i<NF; i++) print $i, $NF}'
YLB     30
YLR     30
YLS     30

答案2

答案3

这是使用“sed”执行此操作的一种方法:

TAB=`echo 'x' | tr 'x' '\011'`; # tab
SPC=`echo 'x' | tr 'x' '\040'`; # space
WS="[${SPC}${TAB}]";            # whitespace regex
echo "YLB; YLR; YLS ${TAB} 30" |
sed -ne "
    /\n/!G
    s/^\([^;]*\);${WS}*\(.*\)\(${WS}${TAB}.*\)/\1\3\2\3/
    P;/\n.*\n/D
 "

我们必须有 shell 变量 TAB/SPC/WS,因为 POSIX“sed”不支持 \t \s,因此这是一个穷人的实现。

相关内容