【问题标题】:In a *nix environment, how would I group columns together?在 *nix 环境中,如何将列组合在一起?
【发布时间】:2011-12-04 22:06:27
【问题描述】:

我有以下文本文件:

A,B,C
A,B,C
A,B,C

有没有办法使用标准的 *nix 工具(cut、grep、awk、sed 等)来处理这样的文本文件并获得以下输出:

A
A
A
B
B
B
C
C
C

【问题讨论】:

  • 我认为您应该能够单独使用 rs(1) 来执行此操作,但我无法让它在我的计算机上按预期工作。

标签: linux command-line-interface text-processing unix


【解决方案1】:

你可以这样做:

tr , \\n

这会产生

A
B
C
A
B
C
A
B
C

你可以排序。

除非你想拉第一列然后第二列然后第三列,在这种情况下你想要这样的东西:

awk -F, '{for(i=1;i<=NF;++i) print i, $i}' | sort -sk1 | awk '{print $2}'

为了解释这一点,第一部分生成

1 A
2 B
3 C
1 A
2 B
3 C
1 A
2 B
3 C    

第二部分将稳定排序(因此内部顺序被保留)

1 A
1 A
1 A
2 B
2 B
2 B
3 C
3 C
3 C    

第三部分会去掉数字

【讨论】:

    【解决方案2】:

    试试:

    awk 'BEGIN {FS=","} /([A-C],)+([A-C])?/ {for (i=1;i<=NF;i++) print $i}' YOURFILE | sort
    

    【讨论】:

      【解决方案3】:

      如果您事先知道列数,则可以使用外壳 for 循环和 cut 组合。下面是一个使用 bash 语法的例子:

      for i in {1..3}; do
          cut -d, -f $i file.txt
      done
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-05-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-05-10
        • 2018-12-12
        • 1970-01-01
        • 2021-12-03
        相关资源
        最近更新 更多