#proposal #hash #utility #chain #line #input #input-file

nightly bin+lib 小布尔

当候选运行时被提交到基于 Substrate 的链,如 Polkadot 或 Substrate 时,此 WASM blob 被哈希。可见的提案哈希实际上是前缀和哈希过的运行时。这个实用程序做同样的事情,并允许离线计算新运行时的提案哈希。您不需要节点,甚至不需要互联网连接即可使用此实用程序。

4 个版本

0.1.3 2020 年 8 月 15 日
0.1.2 2020 年 8 月 12 日
0.1.1 2020 年 8 月 11 日
0.1.0 2020 年 8 月 11 日

39#proposal

MIT 许可证

145KB
1K SLoC

Rust 864 SLoC // 0.0% comments AsciiDoc 143 SLoC

小布尔

smlr

安装

    cargo install smlr

帮助

这是 smlr v0.1.3 的文档。调用 smlr --help 将显示可用的选项

smlr 0.1.3
Wilfried Kopp <chevdor@gmail.com>
Find similar lines in a file or stdin.

USAGE:
    smlr [FLAGS] [OPTIONS] [FILE]

FLAGS:
        --case-sensitive    Weather the checks consider the case or not
    -c, --count             Show the number of occurences
        --debug             Debug mode, slower
    -f, --full              Set the score to the max
        --help              Prints help information
    -h, --headers           Show the headers
    -b, --ignore-spaces     Ignore spaces
    -i, --invert            Invert the result
    -l, --line-numbers      How many of the next lines are considered in the match. A larger value requires more
                            processing.
        --no-index          Prevent saving index to disk
        --strict            = Max distance = 0
    -V, --version           Prints version information
    -v, --verbose           Sets the level of verbosity

OPTIONS:
        --algo <algo>
            Algo used to calculate the distance [default: Levenshtein]  [possible values: Levenshtein,
            DamerauLevenshtein]
    -d, --distance <distance>                        The max distance [default: 3]
        --persistence-folder <persistence-folder>
            Location where the persistence files will be stored if the mode is custom [default: temp]

        --persistence-mode <persistence-mode>
            Location where the persistence files will be stored. In 'beside' mode, the current folder will be used.
            [default: temp]  [possible values: temp, custom, beside]
    -s <scope>
            How many of the next lines are considered in the match. A larger value requires more processing. [default:
            10]

ARGS:
    <FILE>    Sets the input file to use. Alternatively, you may pipe <stdin>.

rustdoc 可以在这里找到 这里

概览

smlr 是一个命令行实用程序,可帮助您在文本数据中找到 相似的 条目。它并不旨在取代 uniqawk 等工具。

以下数据在 samples 文件夹中可用。让我们考虑一些示例

性能

在我的 iMac 上(融合驱动器,没有 SSD)的测试运行中,在 30 秒内处理了 11MB。

   $ TARGET=/var/log/install.log; du -h $TARGET | head -n 1; time smlr -lcb $TARGET > /tmp/output.txt
   11M    /var/log/install.log
   Finished release [optimized] target(s) in 0.01s
   Running `target/release/smlr -lcb /var/log/install.log`

   real    0m19.603s
   user    0m18.310s
   sys     0m1.202s

示例 #1

假设我们想在以下数据中找到重复项

Table uniq vs smlr
输入:samples/file03.txt uniq-i-c file03.txt 小布尔-cbf file03.txt
Pizza
Ice Cream
Waffle
PiZZa
Waffle
pizza
Pizza
Pizaz
Peanuts
PIZZA
Beef Jerky
Popcorn
pizza
pizza
   1 Pizza
   1 Ice Cream
   1 Waffle
   1 PiZZa
   1 Waffle
   1 pizza
   1 Pizza
   1 Peanuts
   1 PIZZA
   1 Beef Jerky
   1 Popcorn
   2 pizza
7       Pizza
1       Ice Cream
2       Waffle
1       Peanuts
1       Beef Jerky
1       Popcorn

Table uniq vs smlr

让我惊讶的是,uniq 在查找一些不区分大小写的匹配项时似乎失败了。

uniq 的结果有点令人惊讶,因为我预计会找到 4 个披萨,而不是这里一个,那里一个。这个问题可以通过使用 sort 命令轻松解决。

在下面的示例中,我们使用 sort 对输入进行处理,以分组所有重复项。然后我们再次使用 sort 来首先显示最多的重复项。

$ cat file03.txt | sort | uniq -i -c | sort -r
   3 pizza
   3 PiZZa
   2 Waffle
   1 Popcorn
   1 Peanuts
   1 PIZZA
   1 Ice Cream
   1 Beef Jerky

尽管使用了 --i,但 uniq 仍然在处理不同大小写的重复项时存在问题,但 sort 可以提供帮助。

$ cat file03.txt | sort -f | uniq -i -c | sort -r
   7 PIZZA
   2 Waffle
   1 Popcorn
   1 Peanuts
   1 Ice Cream
   1 Beef Jerky

示例 #2

如果我们对我们输入的一些字段进行一些修改,uniq 将在查找重复项时失败。

以下是我们的工作数据

2020-01-01  Pizza
2020-01-01  Ice Cream
2020-01-02  Waffle
2020-01-03  PiZZa
2020-03-05  Waffle
2020-03-05  pizza
2020-03-06  pizza
2020-03-06  Peanuts
2020-03-06  PIZZA
2020-03-06  Beef Jerky
2020-03-07  Popcorn
2020-03-07  pizza
2020-03-08  pizza

我们陷入了之前的 sort+uniq 方法。以下任何一种方法都无法按预期工作

  • cat file04.txt|sort-f|uniq-i-c-f1
  • cat file04.txt|sort-f|uniq-i-c-s10

失败的原因是我们的 sort 技巧不再有效。我们调用 awk 来救助

$ cat file04.txt | awk '{print $2}' | sort -f | uniq -c -i | sort -r
   7 PIZZA
   2 Waffle
   1 Popcorn
   1 Peanuts
   1 Ice
   1 Beef

示例 #3

这是一个棘手的例子,其中 uniq 即使在其他友好命令的帮助下也无法提供帮助

2020-01-01  Pizza
2020-01-01  Ice Cream
2020-01-01  Ice  Cream
2020-01-02  Waffle
2020-01-03  PiZZa
2020-03-05  Waflle
2020-03-05  pizza
2020-03-06  piiza
2020-03-06  Peanuts
2020-03-06  PlZZA
2020-03-06  Beef Jerky
2020-03-07  POPCORN
2020-03-07  P0PCORN
2020-03-07  pizza
2020-03-08  pizza

这个例子中故意包含了一些错误。这些是通常很难发现的错误(取决于你的字体和专注程度)!

看看 smlr 如何处理这些。

$ time smlr -cbf file05.txt | sort -r
7       2020-01-01  Pizza
2       2020-03-07  POPCORN
2       2020-01-02  Waffle
2       2020-01-01  Ice Cream
1       2020-03-06  Peanuts
1       2020-03-06  Beef Jerky

real    0m0.005s
user    0m0.002s
sys     0m0.004s

虽然 smlr 可以做更多的事情,但它会在 CPU 和内存上有所消耗。在解析大文件时要小心!

从 Git 安装

    cargo install --git https://gitlab.com/chevdor/smlr.git --tag v0.1.3

不建议在生产环境中安装 `master` 版本:在之前的命令中不要省略 `--tag v0.1.3`。

许可证

MIT License

Copyright (c) 2019-2020 Wilfried Kopp - Chevdor

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

依赖项

~1.7–2.7MB
~50K SLoC