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}
옵션을 입력하지 않으면 일치하는 줄만 인쇄됩니다. 그런 다음 이전 행도 씁니다. 나는 두 번째 파일을 생성한 다음 이를 첫 번째 파일 이름으로 다시 복사하는 것(QPS를 잘라내는 것, ...)보다 더 나은 방법이 있음을 알고 있습니다. 당신이 제공할 수 있는 어떤 도움이라도 감사하겠습니다.
답변1
sed더 많은 도움을 드릴 수 있습니다.
sed -E -i 's/^QPS,[[:space:]]+SERVFAIL QPS[[:space:]]+([[:digit:]]+)[[:space:]]([[:digit:]]+$)/QPS\t \1\nSERVFAIL QPS\t \2/' file.txt
이것 -나깃발이 장례식을 치뤘습니다.