我想我可能刚刚搜索错了,但我没有找到任何答案。如果有重复,请告诉我,我可以将其删除。
我正在使用ack
(链接),它在引擎盖下有 Perl 5,来获取 n-gram - 特别是高阶 n-gram。我可以使用我知道的语法(基本上最多$9
)获得最多 9 克,但我无法获得 10 克。使用$10
只是给了我$1
一个0
之后。之类的东西$(10)
,并${10}
没有解决问题。我对使用语言建模工具包的解决方案不感兴趣,我想使用ack
.
我使用的一个数据集是马克吐温的全集
( wget http://www.gutenberg.org/cache/epub/3200/pg3200.txt && mv pg3200.txt TWAIN_Mark_complete_orig.txt
).
我已经解析干净了(请参阅文章末尾的解析注释)并将解析结果保存为TWAIN_Mark_complete_parsed.txt
.
我从 2 克中得到了很好的结果,代码和部分结果是
time cat TWAIN_Mark_complete_parsed.txt | \
ack '(\S+) +(?=(\S+) +)' \
--output '$1 $2' | \
sort | uniq -c | \
sort -rn > Twain_2grams.txt
## `time` info not shown …
Run Code Online (Sandbox Code Playgroud) 我有一个两列文件,您可以按如下方式创建
cat > twocol << EOF
007 03
001 03
003 01
137 12
001 11
002 01
002 02
002 03
001 02
002 04
137 94
010 21
001 01
EOF
Run Code Online (Sandbox Code Playgroud)
生成的文件twocol
只包含数字行。
期望的结果
我想执行某种命令twocol
并得到以下结果。(我认为看到它比尝试重述我有点令人困惑的问题标题要好得多 - “按第一列排序,然后第二列排序;输出唯一的第一列一次,但输出所有第二列”。)
001 01
02
03
11
002 01
02
03
04
003 01
007 03
010 21
137 12
94
Run Code Online (Sandbox Code Playgroud)
这与 simplesort
给我的不同,即不同于
001 01
001 02
001 03
001 11
002 01
002 02
002 03
002 …
Run Code Online (Sandbox Code Playgroud)