특정 문자열에 대해 여러 열 뒤의 값 검색

특정 문자열에 대해 여러 열 뒤의 값 검색

다음 파일이 있습니다(vim에서 복사).

name: some name^M
^M
count: 1^M
^M
region: some_region
name: some name^M
^M
count: 2^M
^M
region: some_region^M
^M
name: some name^M
^M
count: 1^M
^M
region: some_region^M
^M

Testing Powershell scripts execustions from Rundeck server against Windows server

이름, 개수, 면적 뒤의 값만 가져오는 방법

원하는 출력:

some name 1 some region
some name 2 some region
some name 1 some region

그리고 grep -E 'name|count|region' output.txt | sed 's/^.*: //'

나는 가지고있다

some name
1
some_region
some name
2
some_region
some name
1
some_region

여러 열을 생성하는 방법은 무엇입니까?

답변1

Awk해결책:

awk '/^(name|count|region):/{
         sep = (/^region/? ORS : OFS);
         gsub(/^[^:]+:[[:space:]]*|[[:space:]]*$/, "");
         printf "%s%s", $0, sep 
     }' file.txt

산출:

some name 1 some_region
some name 2 some_region
some name 1 some_region

답변2

두 단계를 거쳐 언급된 결과를 얻었습니다.

첫 번째 단계에서는 패턴을 검색하여 Output.txt 파일에 저장합니다.

두 번째 단계에서는 for 루프를 사용하고 요구 사항에 따라 내용을 인쇄했습니다.

1 단계

egrep -i "name|count|region" l.txt | awk -F ":" '{print $NF}' | sed "s/\^M//g" >> Ouput.txt

2 단계

for ((i=1;i<=9;i=i+3)); do sed -n ''$i',+2p' Output.txt |sed "N;s/\n/ /g" |sed "N;s/\n/ /g"; done

산출

 some name  1  some_region
 some name  2  some_region
 some name  1  some_region

답변3

awk를 사용하여 가능한 대답 중 하나:

awk '/name: /{name=substr($0,7)} /count: /{cnt=substr($0,8)} /region:/{print name" "cnt" "substr($0,9)}' input

관련 정보