小编bba*_*025的帖子

ack :获取第 10 个(或更大的第 n 个)匹配/捕获组

我想我可能刚刚搜索错了,但我没有找到任何答案。如果有重复,请告诉我,我可以将其删除。

问题背景

我正在使用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)

perl ack pattern-matching

5
推荐指数
0
解决办法
90
查看次数

awk:按第一列排序,然后按第二列排序;输出唯一的第一列一次,但输出所有第二列

我有一个两列文件,您可以按如下方式创建

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)

bash awk perl text-processing sort

5
推荐指数
2
解决办法
471
查看次数

标签 统计

perl ×2

ack ×1

awk ×1

bash ×1

pattern-matching ×1

sort ×1

text-processing ×1