在* nix环境中,如何将列组合在一起?

时间:2011-10-10 23:59:22

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

我有以下文本文件:

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

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

A
A
A
B
B
B
C
C
C

3 个答案:

答案 0 :(得分:5)

你可以这样做:

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    

第三部分将删除数字

答案 1 :(得分:3)

如果您知道高级列数,则可以使用shell for-loop与cut结合使用。以下是使用bash语法的示例:

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

答案 2 :(得分:0)

尝试:

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