テキストを行に分割してその値を印刷するには?

テキストを行に分割してその値を印刷するには?

テキストを複数行に分割してその値を印刷したいと思います。たとえば、次のように変更します。

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

この試み

sed 's/; /\n/g' yourfile

この記事を参照してください。 https://stackoverflow.com/questions/18486203/to-insert-line-breaks-in-a-file-whenever-a-comma-is-encountered-shell-scripティー

答え3

「sed」を使用してこれを行う1つの方法は次のとおりです。

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
 "

POSIX "sed" は \t \s をサポートしていないため、シェル変数 TAB/SPC/WS が必要です。したがって、これは貧しい人々の実装です。

関連情報