我有带有空格分隔字符串 (2-5) 的大文本文件。字符串可以包含“'”或“-”。我想用管道代替第二个空格。
最好的方法是什么?
使用 sed 我在想这个:
sed -r 's/(^[a-z'-]+ [a-z'-]+\b) /\1|/' filename.txt
Run Code Online (Sandbox Code Playgroud)
任何其他/更好/更简单的想法?
我有两个字段的巨大文本文件,第一个是字符串,第二个是整数。文件按第一个字段排序。我想在输出中得到的是每个唯一字符串一行以及相同字符串的数字总和。一些字符串只出现一次,而另一些则出现多次。例如,鉴于下面的示例数据,对于字符串 glehnia,我希望在结果中得到 10+22=32。
任何建议如何使用 gnuwin32 命令行工具或在 linux shell 中执行此操作?
谢谢!
glehnia 10 glehnia
22
glehniae 343
glehnii 923 glei
1171
glei
2283 glei
3466
gleib 914
gleiber 652
gleiberg 495
gleiberg 709
我有两个文件,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)