我一直试图在bash中的制表符分隔文件的每一列中获取唯一值。因此,我使用了以下命令。
cut -f <column_number> <filename> | sort | uniq -c
它工作正常,我可以在列中获取唯一值,其计数如下
105 Linux
55 MacOS
500 Windows
我要执行的操作不是按列值名称(在此示例中为OS名称)进行排序,而是要按计数对它们进行排序,并可能以这种输出格式将计数放在第二列中。因此它必须看起来像:
Windows 500
MacOS 105
Linux 55
我该怎么做呢?
采用:
cut -f <col_num> <filename>
| sort
| uniq -c
| sort -r -k1 -n
| awk '{print $2" "$1}'
所述sort -r -k1 -n
排序以相反的顺序,使用第一字段为数值。在awk
简单地反转列的顺序。您可以这样测试添加的管道命令(格式更好):
pax> echo '105 Linux
55 MacOS
500 Windows' | sort -r -k1 -n | awk '{printf "%-10s %5d\n",$2,$1}'
Windows 500
Linux 105
MacOS 55
问题内容: 我需要对.flv文件进行数字排序,并且能够使用以下命令执行此操作: 但是有很多文件(数百个),因此无法正确排序。 但是奇怪的是,如果我在不起作用的情况下破坏了该命令。 我可以只使用ls,但文件夹中还有其他文件类型。 到目前为止我尝试过的是: 问题答案: 我会尝试以下代码。适用于我的测试场景: 所述列表上的每个线FLV文件1中,需要在每行开始对第二个字符的第一(且仅一个)字(开始数)。按
问题内容: 要求 :我有一个.gz格式的Json文件。因此,压缩后的大小约为500 MB。当我提取它时,json文件几乎变成了大约10 GB。提取的JSON文件逐行包含单个JSON对象。我想要的是使用任何bash脚本或python程序基于字段对文件进行排序。 由于文件太大,因此不建议将其加载到内存中。因此,我使用了gzcat和cat bash命令来流式传输JSON数据,然后将它们通过管道传输到jq
问题内容: STRINGS.txt的示例内容: 是否可以仅使用bash对所有这些版本字符串进行排序,而最新版本位于顶部? 问题答案: 这是可能的,但工作量却很愚蠢。如果您使用GNU排序: …将完全按照您的要求进行。 现在,如果您 真的 没有任何外部工具,那么您将遇到麻烦。Freenode的#bash IRC频道上的BlastHardcheese已在本机bash中编写了以下quicksort算法,出
问题内容: 示例: File.txt的内容: 当使用’sort -k 1,1 File.txt’时,行的顺序不会改变,尽管我们期望: 如何根据绝对 数值 对包含数字的字段进行排序? 问题答案: 看看手册页进行排序 … 所以这是一个例子…
问题内容: 在使用与选择不给我预期的结果。 我尝试使用,等(仅对以开头的数字获得正确的顺序)。似乎这里有些我很想念的东西… 问题答案: 您需要-t。标志以指定“。” 作为分隔符,多个键位置说明符可处理越来越长/更深的数字。我仍然不太清楚它是如何工作的,但是它的工作原理是… 要么
问题内容: 我正在尝试根据第四列对该文件进行排序。我希望根据第四列的值对文件重新排序。 文件: 我想要这样排序: 我尝试了以下命令: 但是我得到了非法的变量名错误。有人可以帮我吗? 问题答案: 要对第四列进行排序,请仅使用选择器。 您可能还想更自然地对数字排序。例如,屈服而不是(字典顺序)。 如果您收到有关的错误,请确保您的外壳是bash。也许您缺少脚本的顶部?