我真的很抱歉这个其他的菜鸟问题,但我无法弄清楚这里发生了什么.我想计算文件中单词的频率,其中单词是逐行的.该文件非常大,所以这可能是问题(在这个例子中它计数300k行)
我执行此命令:
cat .temp_occ | uniq -c | sort -k1,1nr -k2 > distribution.txt
Run Code Online (Sandbox Code Playgroud)
问题是它给了我一个小小的错误:它认为我的语言不同.例如,第一个条目是:
306 continua
278 apertura
211 eventi
189 murah
182 giochi
167 giochi
Run Code Online (Sandbox Code Playgroud)
你可以看到,与giochi重复两次
在文件的底部它变得更糟,它看起来像这样:
1 win
1 win
1 win
1 win
1 win
1 win
1 win
1 win
1 win
1 winchester
1 wind
1 wind
Run Code Online (Sandbox Code Playgroud)
对于所有的话
对于这个愚蠢的问题,我真的很抱歉,但我有点贝壳编程的菜鸟.我究竟做错了什么?
非常感谢
我正在尝试在文本文件上使用以下命令:
$ sort <m.txt | uniq -c | sort -nr >m.dict
Run Code Online (Sandbox Code Playgroud)
但是,我收到以下错误消息:
sort: string comparison failed: Invalid or incomplete multibyte or wide character
sort: Set LC_ALL='C' to work around the problem.
sort: The strings compared were ‘enwedig\r’ and ‘mwy\r’.
Run Code Online (Sandbox Code Playgroud)
我在Windows 7上使用Cygwin,并且在编辑m.txt时遇到麻烦,将文件中的每个单词放在一个新行上.请参阅:
我不确定我是否因此而收到这些错误,或者因为m.txt包含来自威尔士语字母的字符(当我在Python中使用威尔士文本时,我需要将编码更改为'Latin-1 ").
我尝试按照错误消息的建议并更改LC_ALL ='C'然而这没有帮助.任何人都可以详细说明我收到的错误,并提供有关如何尝试解决此问题的任何建议.
更新:
尝试使用dos2unix时,会在某些行显示有关无效字符的错误.事实证明这些不是威尔士人物,而是其他奇怪的人物(箭头等).我查看了删除这些字符的文本文件,直到我能够无错误地使用dos2unix命令.但是,在使用dos2unix命令后,所有文本都连接在一起(没有空格/换行符或任何内容,而应该是这样,文件中的每个单词都在单独的行上)然后我使用unix2dos并且文本文件恢复正常.如何在每个单词的各个单词上使用sort命令而不会给出错误的'\ r'字符?
我有一个包含以下数据的输入文件:
line1
line2
line3
begin
line5
line6
line7
end
line9
line1
line3
Run Code Online (Sandbox Code Playgroud)
我试图找到所有重复的行,我尝试过
sort filename | uniq -c
Run Code Online (Sandbox Code Playgroud)
但似乎不适合我:
它给了我:
1 begin
1 end
1 line1
1 line1
1 line2
1 line3
1 line3
1 line5
1 line6
1 line7
1 line9
Run Code Online (Sandbox Code Playgroud)
这个问题可能看起来重复,因为在文件中查找重复行并计算每行重复了多少次? 但输入数据的性质不同。
请建议。
我有两个句子包含重复的单词,例如,文件中的输入数据my_text.txt:
Unix 和 Linux 操作系统。
Unix 和 Linux 系统是为了创造一个促进高效程序的环境。
我使用了这个脚本:
while read p
do
echo "$p"|sort -u | uniq
done < my_text.txt
Run Code Online (Sandbox Code Playgroud)
但输出与输入文件的内容相同:
Unix 和 Linux 操作系统。Unix 和 Linux 系统是为了创造一个促进高效程序的环境
如何从两个句子中删除重复的单词?
尝试从MacOS bash shell中的大文件中提取非英语字符时出现"非法字节序列"错误.这是我尝试使用的脚本:
sed 's/[][a-z,0-9,A-Z,!@#\$%^&*(){}":/_-|. -][\;''=?]*//g' < $1 >Abhineet_extract1.txt;
sed 's/\(.\)/\1\
/g' <Abhineet_extract1.txt | sort | uniq |tr -d '\n' >&1;
rm Abhineet_extract1.txt;
Run Code Online (Sandbox Code Playgroud)
这是我得到的错误:
uniq: stdin: Illegal byte sequence
Run Code Online (Sandbox Code Playgroud)
"+?
我需要对文本文件进行排序并删除重复项的脚本。大多数(如果不是全部)示例都使用这种sort file1 | uniq > file2方法。在里面man sort中,有一个 -u 选项可以在排序时执行此操作。
有理由使用其中一种而不是另一种吗?也许可以使用 -u 选项?还是内存/速度问题?
我经常sort | uniq -c用来计算统计数据.现在,如果我有两个带有这种计数统计数据的文件,我想将它们放在一起并添加计数.(我知道我可以附加原始文件并计算在那里,但我们假设只有计数文件可以访问).
例如给出:
a.cnt:
1 a
2 c
Run Code Online (Sandbox Code Playgroud)
b.cnt:
2 b
1 c
Run Code Online (Sandbox Code Playgroud)
我想连接并获得以下输出:
1 a
2 b
3 c
Run Code Online (Sandbox Code Playgroud)
在shell中执行此操作的最短方法是什么?
编辑:
谢谢你到目前为止的答案!
可能还需要考虑的一些可能的方面:
sort | uniq -c这种情况下是否有一些样式命令行选项,一次只能查看两行?我有一个如下所示的文件,我想保留在第三个字段上具有最高值的第一个和第二个字段之间的组合(带有箭头的那些,实际文件中不包含箭头)。
1 1 10
1 1 12 <-
1 2 6 <-
1 3 4 <-
2 4 32
2 4 37
2 4 39
2 4 40 <-
2 45 12
2 45 15 <-
3 3 12
3 3 15
3 3 17
3 3 19 <-
3 15 4
3 15 9 <-
4 17 25
4 17 28
4 17 32
4 17 36 <-
4 18 4 <-
Run Code Online (Sandbox Code Playgroud)
为了有这样的输出:
1 1 12
1 2 6 …Run Code Online (Sandbox Code Playgroud) 在调试Python程序时,我最近发现Python itertools#groupby()函数需要对输入集合进行排序,因为它只对序列中出现的相同元素进行分组:
一般来说,可迭代对象需要已经在相同的键函数上进行排序。
groupby()的操作类似于Unix中的uniq过滤器
在这两种情况下,uniq以及 Python 的情况groupby()下,我想知道在不排序的情况下应用这些的用例可能是什么。
显然,排序的成本可能很高,因此应尽可能避免。然而,如果排序在实践中显然是不可避免的,那么为什么 Python 开发人员决定不将其设为默认值呢groupby()?这似乎给该功能的用户造成了很多困惑。
我注意到这个设计决策似乎并不具有普遍性。像 Scala 这样的语言似乎在其groupBy()函数中隐式地对集合进行排序。
因此,我的问题是:哪些用例导致了在 uniq 和 Python 的 groupby() 中不隐式排序的设计决策?
参考文件: http : //snap.stanford.edu/data/wiki-Vote.txt.gz
(它是一个磁带存档,其中包含一个名为 的文件Wiki-Vote.txt)
文件中的前几行包含以下内容, head -n 10 Wiki-Vote.txt
# Directed graph (each unordered pair of nodes is saved once): Wiki-Vote.txt
# Wikipedia voting on promotion to administratorship (till January 2008).
# Directed edge A->B means user A voted on B becoming Wikipedia administrator.
# Nodes: 7115 Edges: 103689
# FromNodeId ToNodeId
30 1412
30 3352
30 5254
30 5543
30 7478
3 28
Run Code Online (Sandbox Code Playgroud)
我想找到图中的节点数(尽管它已经在第 3 行中给出)。我运行了以下命令,
awk '!/^#/ { print $1; print $2; }' Wiki-Vote.txt …Run Code Online (Sandbox Code Playgroud)