gpt4 book ai didi

string - 按 bash 中的行数对文本列进行排序

转载 作者:行者123 更新时间:2023-11-29 09:00:23 27 4
gpt4 key购买 nike

假设一个文本文件包含 x 个字符串列。

$cat file # where x=3
foo foo foo
bar bar bar
baz baz
qux

bash 中有没有一种方法可以根据它们包含的文本字符串(即填充的行)的数字对这些列进行排序,同时保持每列中行的内部顺序?

$sought_command file
foo foo foo
bar bar bar
baz baz
qux

本质上,行数最多的列排在第一位,行数第二多的列排在第二位,依此类推。

(这个任务很容易通过 R 实现,但我想知道通过 bash 的解决方案。)

编辑 1:

这里有一些额外的细节:每一列至少包含一个文本字符串(即,一个填充行)。文本字符串可以构成任何字母数字组合并具有任何长度(但显然不包含空格)。输出列不得插入空行。列分隔符没有先验限制,只要它在整个表中保持一致即可。

此任务所需要做的就是按原样移动列,以便它们按列长度排序。 (我知道在 bash 中实现它听起来比实际更容易。)

最佳答案

使用 GNU awk for sorted_in 并假设您的列是制表符分隔的:

$ cat tst.awk
BEGIN{ FS=OFS="\t" }
{
for (i=1; i<=NF; i++) {
if ($i ~ /[^[:space:]]/) {
cell[NR,i] = $i
cnt[i]++
}
}
next
}
END {
PROCINFO["sorted_in"] = "@val_num_desc"
for (row=1; row<=NR; row++) {
c=0
for (col in cnt) {
printf "%s%s", (c++?OFS:""), cell[row,col]
}
print ""
}
}

$ awk -f tst.awk file
foo foo foo
bar bar bar
baz baz
qux

关于string - 按 bash 中的行数对文本列进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40851200/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com