如何更改 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

我一直在使用 sed 更改制表符的间距以保存为 csv。现在事实证明,我们需要将 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} 选项,它只会打印匹配的行。然后它也写旧的行。我知道必须有一种更好的方法来做到这一点,而不是创建第二个文件,然后将其复制回第一个文件名(削减 QPS,...)。如果您能提供任何帮助,我将不胜感激。

答案1

sed可以帮助你更多。

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

-我旗帜使丧礼就位。

相关内容