sed
출력을 파이프 하고 아래 어댑터 이름을 제거 sed
하고 값을 쉼표로 그룹화하고 싶습니다.
ent13: 16 3979 ent12: 211 411 3978 ent11: 15 3977 ent10: 111 178 179 311 511 1719 3976
답변1
공백을 쉼표로 바꾸고, 콜론 앞의 단어를 제거하고, 선행 공백을 제거하고, 공백 앞의 쉼표를 제거합니다.
sed 's/ /,/g; s/[^,]*:,/ /g;s/^ //;s/, / /g'
산출:
16,3979 211,411,3978 15,3977 111,178,179,311,511,1719,3976
답변2
sed
먼저 포함된 패턴을 제거한 ent
다음 간격을 느슨하게 하고 다음 ,
으로 교체할 수 있습니다.
sed 's/ent[0-9][0-9]: //g; s/ /,/g'
답변3
GNU 사용 awk
또는 mawk
(에서 정규식 지원 RS
):
$ mawk -v RS='ent[0-9][0-9]: ' -v ORS=' ' -v FS=' ' -v OFS=',' '
$1 != "" { $1=$1; print }
END { printf("\n") }' <file
16,3979 211,411,3978 15,3977 111,178,179,311,511,1719,3976
또는 동등하게,
$ mawk 'BEGIN { RS="ent[0-9][0-9]: "; ORS=FS=" "; OFS="," }
$1 != "" { $1=$1; print }
END { printf("\n") }' <file
16,3979 211,411,3978 15,3977 111,178,179,311,511,1719,3976
entNN:
이는 단일 행을 (여기서 숫자는)로 N
구분된 레코드 집합으로 처리합니다 . 각 레코드는 공백으로 구분된 필드 집합으로 읽혀집니다.
테스트 $1 != ""
는 첫 번째 빈 레코드(첫 번째 레코드 구분 기호 앞에 아무것도 없음)를 건너뛰고 해당 블록은 출력용 레코드를 다시 포맷하기 위해 다음을 수행합니다 $1=$1
. 이렇게 하면 awk
제공된 ORS
합계 값을 사용하여 OFS
형식이 다시 지정 됩니다 .
답변4
"쉼표로 값을 그룹화한다"는 것은 "각 어댑터의 번호를 다른 어댑터의 번호와 쉼표로 구분한다"는 뜻인가요? 그런 다음 시도해 보세요.
sed 's/ *ent[0-9][0-9]: /, /g; s/^, //g' file
16 3979, 211 411 3978, 15 3977, 111 178 179 311 511 1719 3976