我有这种格式的数据(像这样的很多行):
TASK : Task 1
TASK : Task 2
TASK : Task 3
OWNER : Emp 1
OWNER : Emp 2
OWNER : Emp 3
Deadline : Monday
Deadline : Tuesday
Deadline : Wednesday
Run Code Online (Sandbox Code Playgroud)
这个,我想转换为:
TASK OWNER Deadline
Task 1 Emp 1 Monday
Task 2 Emp 2 Tuesday
Task 3 Emp 3 Wednesday
Run Code Online (Sandbox Code Playgroud)
即使我可以在没有列标题名称的情况下提取每个列,它也会很好.之后我可以手动添加列名.
有没有办法用'awk'或'sed'来做?
awk的一种方式:
awk -F': *' '{i=NR%3;i=i?i:3;a[i]=a[i]?a[i]"\t"$2:$2}
END{for(x=1;x<=length(a);x++)print a[x]}' file
Run Code Online (Sandbox Code Playgroud)
它保留了订单,省略了标题行:
kent$ cat f
TASK : Task 1
TASK : Task 2
TASK : Task 3
OWNER : Emp 1
OWNER : Emp 2
OWNER : Emp 3
Deadline : Monday
Deadline : Tuesday
Deadline : Wednesday
kent$ awk -F': *' '{i=NR%3;i=i?i:3;a[i]=a[i]?a[i]"\t"$2:$2}END{for(x=1;x<=length(a);x++)print a[x]}' f
Task 1 Emp 1 Monday
Task 2 Emp 2 Tuesday
Task 3 Emp 3 Wednesday
Run Code Online (Sandbox Code Playgroud)
awk -F': *' #":any <space>" as FS
'{i=NR%3;i=i?i:3; #take NR%3 in i, if i=0, set i=3. because
#we want the i=0 case at the end of the output
a[i]=a[i]?a[i]"\t"$2:$2}#concatenate the 2nd column to an array
END{for and print}' file#print the content of the array at the end
Run Code Online (Sandbox Code Playgroud)
我们可以将标题保存在var中h并在打印之前将其打印出来a (array):
awk -F': *' '{...h=i==1?(h?h"\t"$1:$1):h;a[i]=..}
END{print h;for...}' file
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
59 次 |
| 最近记录: |