다음 파일이 있습니다(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