【问题标题】:awk split one column into multiple columnsawk 将一列拆分为多列
【发布时间】:2014-12-16 10:08:25
【问题描述】:

如何使用awk根据列值将一列数据拆分为多列? 示例文件和所需的输出如下。我的bash 版本是 3.2.52(1)。

$ cat examplefile
A
1
B
2
B
3
C
10
C
11
C
13
A
4
B
5
B
6
B
7
C
14

期望的输出:

$ cat outputfile
A        B      C
1        2      10
null     B      C
null     3      11
null    null    C
null    null    13
A       B       C
4       5       14
null    B       null
null    6       null
null    B       null
null    7       null

或者忘记空值如何获得输出文件2中的两列?

cat examplefile2
A
1
B
2
B
3
cat outputfile2
A   B
1   2
    B
    3

【问题讨论】:

  • 你尝试了什么?这背后的逻辑是什么?
  • 目的是把A,B,C及其后面的行放到不同的列中
  • 什么决定一个字段是否为空?
  • 将输出视为矩阵
  • 不要评论小事,试着用一个完整的解释、一些例子和你尝试过的东西来编辑你的原始问题。否则,人们不太可能花时间去理解问题并试图找出解决问题的方法。

标签: bash command-line awk


【解决方案1】:

你可以得到它:

awk 'BEGIN{l=1;ll="";} {if (l) {ll=$0;l=0;} else {if (length(a[ll])>0) {a[ll]=a[ll]","ll","$0;} else {a[ll]=ll","$0;}l=1;}} END{for (k in a){print a[k];}}' examplefile

它适用于任意数量的类(A、B、C...)。

输出是:

A,1,A,4
B,2,B,3,B,5,B,6,B,7
C,10,C,11,C,13,C,14

如果您希望它作为列,只需快速查看以下帖子: An efficient way to transpose a file in Bash

【讨论】:

  • 感谢您的努力,尽管这不是我想要的。使用您的命令和转置代码,它会提供以下输出
  • A,1,A,4 B,2,B,3,B,5,B,6,B,7 C,10,C,11,C,13,C,14 什么我要的是以下
  • 猫输出文件 A B C 1 2 10 B C 3 11 C 13 A B C 4 5 14 B 6 B 7
  • 用逗号分割并使用内部 for 转置输入:-)
猜你喜欢
  • 2019-06-09
  • 2013-01-23
  • 2019-09-23
  • 1970-01-01
  • 2019-05-10
相关资源
最近更新 更多