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

发布于 2024-12-09 03:56:08 字数 168 浏览 0 评论 0原文

我有以下文本文件:

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

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

A
A
A
B
B
B
C
C
C

I have the following text file:

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

Is there a way, using standard *nix tools (cut, grep, awk, sed, etc), to process such a text file and get the following output:

A
A
A
B
B
B
C
C
C

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

攀登最高峰 2024-12-16 03:56:08

你可以这样做:

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    

,第三部分将剥离数字

You can do:

tr , \\n

and that will generate

A
B
C
A
B
C
A
B
C

which you could sort.

Unless you want to pull the first column then second then third, in which case you want something like:

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

To explain this, the first part generates

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

the second part will stably sort (so the internal order is preserved)

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

and the third part will strip the numbers

╭ゆ眷念 2024-12-16 03:56:08

如果您事先知道列数,则可以将 shell for 循环与 cut 结合使用。下面是一个使用 bash 语法的示例:

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

You could use a shell for-loop combined with cut if you know in advanced the number of columns. Here is an example using bash syntax:

for i in {1..3}; do
    cut -d, -f $i file.txt
done
梦里泪两行 2024-12-16 03:56:08

尝试:

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

Try:

awk 'BEGIN {FS=","} /([A-C],)+([A-C])?/ {for (i=1;i<=NF;i++) print $i}' YOURFILE | sort
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文