我有两个文件,huge.txt和small.txt. huge.txt有大约 600M 行,它是 14 GB。每行有四个空格分隔的单词(标记),最后是另一个带有数字的空格分隔列。small.txt有 150K 行,大小为 ~3M,一个空格分隔的单词和一个数字。
这两个文件都使用 sort 命令进行排序,没有额外的选项。两个文件中的单词都可能包含撇号 (') 和破折号 (-)。
所需的输出将包含huge.txt文件中的所有列以及匹配small.txt第一个单词huge.txt和第一个单词的第二列(数字)small.txt。
我下面的尝试惨遭失败,并出现以下错误:
cat huge.txt|join -o 1.1 1.2 1.3 1.4 2.2 - small.txt > output.txt
join: memory exhausted
Run Code Online (Sandbox Code Playgroud)
我怀疑的是,即使文件是使用以下方式预先排序的,排序顺序也不正确:
sort -k1 huge.unsorted.txt > huge.txt
sort -k1 small.unsorted.txt > small.txt
Run Code Online (Sandbox Code Playgroud)
问题似乎出现在带有撇号 (') 或破折号 (-) 的单词周围。我还尝试使用最后-d遇到相同错误的选项进行字典排序。
我尝试将文件加载到 MySQL,创建索引并加入它们,但在我的笔记本电脑上似乎需要数周时间。(我没有用于此任务的具有更多内存或快速磁盘/SSD 的计算机)
我看到了两种方法,但不知道如何实现其中任何一种。
如何以 join 命令认为文件正确排序的方式对文件进行排序?
我正在考虑计算MD5或字符串的其他一些哈希值以去除撇号和破折号,但在行尾保留数字。使用散列而不是字符串本身进行排序和连接,最后将散列“翻译”回字符串。由于只有 150K 哈希值,所以还不错。为每个字符串计算单个散列的好方法是什么?一些AWK魔法?
请参阅最后的文件示例。
巨大的样本.txt
had …Run Code Online (Sandbox Code Playgroud) 我无法对收件箱中的邮件进行分类。我正在谈论的是分配颜色类别的能力。我习惯于只需单击打开消息功能区中的图标并选择颜色即可。通常出现在功能区“标签”中的类别图标不存在。当我尝试通过“自定义功能区”添加它时,图标在那里,但它是灰色的。
我发现 ASCII 中的排序结果:
源文件test:
1-
11-
1-a
11-a
Run Code Online (Sandbox Code Playgroud)
使用 ASCII 排序:
$ LANG=en_US.ascii sort test
1-
1-a
11-
11-a
Run Code Online (Sandbox Code Playgroud)
并使用 UTF-8:
$ LANG=en_US.utf8 sort test
1-
11-
11-a
1-a
Run Code Online (Sandbox Code Playgroud)
我觉得这太违反直觉了,而且不是字典顺序。
字符 '-' ( 002d) 不是总是小于[0-9]( 0030-0039) 吗?UTF-8 整理的一般规则是什么?
以及如何绕过它,在 Linux中使UTF-8 的其他字符保持不变,而只需-减少然后[0-9]呢?(因此,它可以影响的结果ls --sort,sort等等)
很抱歉,我更喜欢 Snow Leopard 中的一些东西。在 Finder 中对文件进行排序就是其中之一。
如果我“排列方式”->“无”,它不会对项目进行分组,它看起来像 10.6。我喜欢这个。我仍然可以单击栏以按名称等进行排序,并且看起来不错并且不分组:

但是,如果我选择“排列方式”并选择另一个选项,文件夹开始看起来不同(列标题)并开始分组:

我怎样才能让我在 Lion 上的生活更美好?Applescript 是一个可以接受的解决方案,但也许编辑默认的 plist 文件也可以工作或解锁一些隐藏的选项。
我正在尝试查找所有重复文件(基于 MD5 哈希)并按文件大小排序。到目前为止,我有这个:
find . -type f -print0 | xargs -0 -I "{}" sh -c 'md5sum "{}" | cut -f1 -d " " | tr "\n" " "; du -h "{}"' | sort -h -k2 -r | uniq -w32 --all-repeated=separate
Run Code Online (Sandbox Code Playgroud)
这个的输出是:
1832348bb0c3b0b8a637a3eaf13d9f22 4.0K ./picture.sh
1832348bb0c3b0b8a637a3eaf13d9f22 4.0K ./picture2.sh
1832348bb0c3b0b8a637a3eaf13d9f22 4.0K ./picture2.s
d41d8cd98f00b204e9800998ecf8427e 0 ./test(1).log
Run Code Online (Sandbox Code Playgroud)
这是最有效的方法吗?
我希望数据按照 Python 排序的方式排序,比较 ASCII 值。但是sort命令似乎太聪明了。看一看。由于'.' < '9':
$ sort
.
9
^D
.
9
Run Code Online (Sandbox Code Playgroud)
和 :
$ sort
1.
19
^D
1.
19
Run Code Online (Sandbox Code Playgroud)
这两个还好。但出于某种原因,如果我只是在末尾添加字符:
$ sort
1.c
19z
^D
19z
1.c
Run Code Online (Sandbox Code Playgroud)
可能它试图将其解读为数字或其他东西。我不想那样,我希望它对比较每个字符的 ASCII 值的东西进行排序。在 中找不到这样的选项man,有什么想法吗?
我发现 Google Drive 作为在线笔记本来存储我的日记和记录非常方便,我可以随时随地访问。
现在,当我想搜索特定的文本字符串时,唯一的选择是按相关性和修改日期排序,两者都不是很有帮助。
我想按标题(文件名)对搜索结果进行排序。
到目前为止,我发现已经提出了这个想法,但没有实施:
有什么普通用户可以做的吗?喜欢安装一些应用程序或附加组件?
当我想点击最新消息时,我会不断点击“主题”排序按钮。
如何完全禁用排序?也许通过破解 .exe 文件?
这几乎是无用的功能,我的意思是排序。我想不出除了按日期以外的其他方式对它们进行排序的原因。
我正在谈论的按钮的视觉呈现:

在 Windows 10文件资源管理器中,为了对文件或目录/文件夹名称进行排序,会忽略连字符(和撇号?)字符。例如:
有人知道如何禁用这种行为吗?
它既不受注册表设置的影响,也不受HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\?CurrentVersion\?Policies\?Explorer\?NoStrCmpLogical等效的组策略设置“关闭 Windows 资源管理器中的数字排序”的影响。
sorting ×10
email ×2
awk ×1
bash ×1
command-line ×1
filenames ×1
finder ×1
google-drive ×1
inbox ×1
join ×1
linux ×1
macos ×1
md5sum ×1
ordering ×1
osx-lion ×1
search ×1
sed ×1
thunderbird ×1
unicode ×1
utf-8 ×1
windows-10 ×1
windows-7 ×1
windows-xp ×1