한 줄의 텍스트를 변경하고 기존 항목을 여러 줄로 분할하는 방법

한 줄의 텍스트를 변경하고 기존 항목을 여러 줄로 분할하는 방법

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

이것 -나깃발이 장례식을 치뤘습니다.

관련 정보