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
这 -我旗帜使丧礼就位。