在不使用 'uniq -c' 命令的情况下计算每个单词出现次数的替代方法是什么?
what is the alternate way to count the occurrence of each word without using 'uniq -c' command?
是否可以像使用 uniq -c
一样计算每个单词的出现次数,但使用 之后 而不是之前的计数?
示例场景
名为 text1.txt
的输入文件包含以下数据
Renault:cilo:84563
Renault:cilo:84565
M&M:Thar:84566
Tata:nano:84567
M&M:quanto:84568
M&M:quanto:84569
以上数据中使用的字段为car_company
:car_model
:customerID
想要的结果
cilo 2
Thar 1
nano 1
quanto 2
(car_model
和按 car_model
分组的售出汽车数量)
我的代码
cat test1.txt | cut -d: -f2 | uniq -c
实际结果
2 cilo
1 Thar
1 nano
2 quanto
是否可以在不使用 uniq -c
的情况下执行上述过程,以便我可以交换字段(列)的顺序?
将命令输出保存到文件中"badresult";
cat test1.txt | cut -d: -f2 | uniq -c > badresult
然后将第7个字段剪切下来,保存到文件中,命名为"counts"(要用space(" ")作为分隔符);
cut -d" " -f7 badresult > counts
然后把第八个字段剪切下来,保存到一个文件中,文件名是"models"(要用space(" ")作为分隔符);
cut -d" " -f8 badresult > models
现在您将计数和模型放在单独的文件中。你所要做的就是用"pr"命令分别显示这两个文件(-m:每列一个文件,-T:无预信息)
pr -m -T models counts
使用awk
:
cat test1.txt | cut -d: -f2 | uniq -c | awk '{ t = ; = ; = t; print }'
小 awk 代码使用临时交换字段 1 和 2。
您可以使用 uniq
,只需 post 处理其输出以交换列:
cut -d: -f2 test1.txt | uniq -c | awk '{print "\t" "\n" }'
编辑:已添加 \n
,如评论中所述。
你只需要 awk
即可:
$ awk -F: '{a[]++} END {for (i in a) print i, a[i]}' file
cilo 2
quanto 2
nano 1
Thar 1
这遍历每一行以跟踪第二个字段出现的次数。由于所有内容都存储在数组 a
中,因此只需循环遍历并打印其内容即可。
是否可以像使用 uniq -c
一样计算每个单词的出现次数,但使用 之后 而不是之前的计数?
示例场景
名为 text1.txt
的输入文件包含以下数据
Renault:cilo:84563
Renault:cilo:84565
M&M:Thar:84566
Tata:nano:84567
M&M:quanto:84568
M&M:quanto:84569
以上数据中使用的字段为car_company
:car_model
:customerID
想要的结果
cilo 2
Thar 1
nano 1
quanto 2
(car_model
和按 car_model
分组的售出汽车数量)
我的代码
cat test1.txt | cut -d: -f2 | uniq -c
实际结果
2 cilo
1 Thar
1 nano
2 quanto
是否可以在不使用 uniq -c
的情况下执行上述过程,以便我可以交换字段(列)的顺序?
将命令输出保存到文件中"badresult";
cat test1.txt | cut -d: -f2 | uniq -c > badresult
然后将第7个字段剪切下来,保存到文件中,命名为"counts"(要用space(" ")作为分隔符);
cut -d" " -f7 badresult > counts
然后把第八个字段剪切下来,保存到一个文件中,文件名是"models"(要用space(" ")作为分隔符);
cut -d" " -f8 badresult > models
现在您将计数和模型放在单独的文件中。你所要做的就是用"pr"命令分别显示这两个文件(-m:每列一个文件,-T:无预信息)
pr -m -T models counts
使用awk
:
cat test1.txt | cut -d: -f2 | uniq -c | awk '{ t = ; = ; = t; print }'
小 awk 代码使用临时交换字段 1 和 2。
您可以使用 uniq
,只需 post 处理其输出以交换列:
cut -d: -f2 test1.txt | uniq -c | awk '{print "\t" "\n" }'
编辑:已添加 \n
,如评论中所述。
你只需要 awk
即可:
$ awk -F: '{a[]++} END {for (i in a) print i, a[i]}' file
cilo 2
quanto 2
nano 1
Thar 1
这遍历每一行以跟踪第二个字段出现的次数。由于所有内容都存储在数组 a
中,因此只需循环遍历并打印其内容即可。