我有这个文件(从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