1行のテキストを変更し、既存の項目を複数行に分割する方法

1行のテキストを変更し、既存の項目を複数行に分割する方法

RHEL 7システム。次の出力ファイルがあります。

eDTG=20210210-1540
Sent     74004956
Completed     72185529 (97.54%)
Lost     18119427 (2.46%)
QPS, SERVFAIL QPS     60122 2905
eDTG=20210210-1601

私はcsvとして保存しながらタブ間隔を変更するためにsedを使用してきました。これで、次のようにQPSラインを2つの別々のラインに分割する必要があることがわかりました(ライン間に分割された数字に注意してください)。

eDTG=20210210-1540
Sent     74004956
Completed     72185529 (97.54%)
Lost     18119427 (2.46%)
QPS     60122
SERVFAIL QPS     2905    
eDTG=20210210-1601

私はこれを行うことができます

awk '/QPS/ {printf "QPS\t%s\nSERVFAIL QPS\t%s",$4,$5}' output.txt

しかし、gawk -i inplaceを使用できないため、他のファイルへの書き込みに問題があります。もちろん、その; {print} オプションを入力しないと、一致する行だけが印刷されます。その後、前の行も書き込みます。私は2番目のファイルを作成し、それを最初のファイル名にコピーする(QPSを切り取ること、...)よりも良い方法があることを知っています。あなたが提供できるどんな助けにも感謝します。

答え1

sedもっとお手伝いします。

sed -E -i 's/^QPS,[[:space:]]+SERVFAIL QPS[[:space:]]+([[:digit:]]+)[[:space:]]([[:digit:]]+$)/QPS\t \1\nSERVFAIL QPS\t \2/' file.txt

これ -私旗が葬儀を行いました。

関連情報