我正在学习编程课程,正在尝试进行练习活动,但被卡住了。我有一个包含以下列表的文件:
Monday day
Tuesday day
Easter holiday
Monday day
christmas holiday
Tuesday day
Friday day
Thursday day
thanksgiving holiday
我想做的是
这将是我想要的输出:
1 christmas holiday
1 Easter holiday
1 Friday day
2 Monday day
1 thanksgiving holiday
1 Thursday day
2 Tuesday day
我尝试使用以下代码行:
cat my_file | sort | uniq -c | less
我的问题是单词没有真正排序,因为以大写字母开头的单词会比以小写字母开头的单词先出现。另外,我也不知道如何在数字和单词之间添加制表符(在我的输出中,它们之间只有一个空格)。
你能帮我吗?
答案 0 :(得分:2)
您可以使用-f
对不区分大小写的单词进行排序,并用sed
(1)将制表符替换为空格。 cat
将从管道中删除:
sort -f my_file | uniq -c | sed $'s/ */\t/g' | less
注意:sed
参数前面的美元符号将\t
解释为制表符,而不是\t
。
如果每行中的第一个标签令人讨厌,您也可以使用sed
将其删除:
sort -f my_file | uniq -c | sed 's/^ *//' | sed $'s/ */\t/g' | less
这将产生:
1 christmas holiday
1 Easter holiday
1 Friday day
2 Monday day
1 thanksgiving holiday
1 Thursday day
2 Tuesday day
最后,如果要在第二列和第三列之间保留空格,则应从第二个{{1}省略g
(替换搜索模式的所有出现) }}调用:
sed
结果:
sort -f my_file | uniq -c | sed 's/ *//' | sed $'s/ */\t/' | less