使用Sed或Awk进行数据转换-名称到标题 [英] Data Conversion Using Sed or Awk - Name to Title

查看:50
本文介绍了使用Sed或Awk进行数据转换-名称到标题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的数据格式如下:

APP_OWNER                     : hari
APP_AREA                      : Work:Business Area:AUS
APP_ID                        : 124080
APP_OWNER                     : ari
APP_AREA                      : Work:AUS
APP_ID                        : 124345

我希望将数据转换为以下格式.

I want the data to be converted to below format.

APP_OWNER,APP_AREA,APP_ID
hari,Work:Business Area:AUS,124080
ari,Work:AUS,124345

我可以转换一行,但是如何同时转换三行呢?

I can convert one line but how to do it with 3 lines at the same time?

我的尝试只有一行

sed '0,/: /s//\n/' test.txt

原始问题:将行转换为列Shell脚本

致谢

推荐答案

这是一个 awk 解决方案,没有对任何值进行硬编码:

Here is an awk solution without hardcoding any value:

awk -F '[[:blank:]]+:[[:blank:]]+' 'NR == 1 {fh=$1} !($1 in hdr) {tr = (tr == "" ? "" : tr ",") $1; hdr[$1]} $1 == fh && NR > 1 {print (body ? "" : tr ORS) td; body=1; td=""} {td = (td == "" ? "" : td ",") $2} END {print td}' file

APP_OWNER,APP_AREA,APP_ID
hari,Work:Business Area:AUS,124080
ari,Work:AUS,124345

以下是更具可读性的版本:

Here is more readable version:

awk -F '[[:blank:]]+:[[:blank:]]+' '
NR == 1 {
   fh = $1
}
!($1 in hdr) {                    # collect headers only once
   tr = (tr == "" ? "" : tr ",") $1
   hdr[$1]
}
$1 == fh && NR > 1 {              # print header and body
   print (body ? "" : tr ORS) td  # if body=1 then print only body
   body = 1
   td = ""
}
{
   td = (td == "" ? "" : td ",") $2
}
END {
   print td
}' file

这篇关于使用Sed或Awk进行数据转换-名称到标题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆