微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Linux:计算文件中的空格和其他字符

问题:

我需要匹配邮件机器软件程序的确切格式。 它期望一定的格式。 我可以统计新的行数,回车,标签等等。 使用类似的工具

cat -vte

od -c

删除文本文件中的奇数行

C ++在窗口上输出文本

为什么与Windows相比,Mac上可用的唯一颜色数量不同?

什么从RStudio中运行.bat文件

如何在Windows上使用Python处理包含EOF / Ctrl-Z字符的大型文本文件

wc -l ( or wc -c )

但是,我想知道字符和文本部分之间的前导和尾随空格的确切数量。 选项卡也是如此。

题:

你将如何去分析然后准确地使用普通的unix工具+ perl或python匹配模板? 单线船首选。 此外,你有什么build议匹配DOS编码的文件? 你会先把它翻译成NIX,然后分析还是离开?

UPDATE

使用这个来查看单个空格[在文件中没有'%'字符]:

sed 's/ /%/g' filename.000

计划构build一个分析每行标签和空间内容的脚本。

使用@ shiplu的解决scheme点头反猫的人群:

while read l;do echo $l;echo $((`echo $l | wc -c` - `echo $l | tr -d ' ' | wc -c`));done<filename.000

仍然需要一些Windows的调整,但它的方式很好。

示例文本

阅读的关键:

标有 n的换行符

回车标记为 r

用[:space:]标记的未知空格/制表符(需要依赖这些字符)

rn n [:space:]Institution Anon LLCrn [:space:]123 Blankety Strn [:space:]Greater Abyss,AK 99999rn n n [:space:] 10/27/2011rn [:space:]Requested materials are available for pickup:rn [:space:]e__r[:space:] D_ r[:space:] _Orn [:space:]Bathtime for BonZo[:space:] 45454545454545[:space:] 10/27/2011rn [:space:]Bathtime for BonZo[:space:] 45454545454545[:space:] 10/27/2011rn n n n n n n [:space:] Pantz McManlissrn [:space:] Gibberish Avern [:space:] northern Mirkwood,ME 99999rn ( untold variable amounts of n chars go here )

更新2

使用带有阅读的IFS给出了类似的结果,下面的人发布的ruby。

while IFS='' read -r line do printf "%sn" "$line" | sed 's/ /%/g' | grep -o '%' | wc -w done < filename.000

使用awk修改文本

如何按第三列中的数字对数据进行sorting?

如何编辑300 GB的文本文件(基因组数据)?

是否有任何技巧来计算文本文件中的行数?

如何在Linux中的多行查找和replace文本?

perl -nwE 'print; for my $s (/([t ]+)/g) { say "Count: ",length $s }' input.txt

这将统计标签或空间的单个组,而不是计算整个行中的所有空白。 例如:

foo bar

将打印

foo bar Count: 4 Count: 8

您可能希望跳过单个空格(单词之间的空格)。 即不要指望Bathtime for BonZo在Bathtime for BonZo的空间。 如果是这样,用{2,}替换+或任何你认为合适的最小值。

perl -nlE'say 0+( () = /s/g );'

与当前接受的答案不同,这不会将输入拆分为字段,从而丢弃结果。 它也不会不必要地创建一个数组来计算列表中的值的数量

习惯用法

0+( ... )强加标量上下文(如scalar( ... ) ,但它更清晰,因为它告诉读者一个数字是预期的。

标量上下文中的列表赋值返回RHS返回的元素的数量,所以0+( () = /.../g )给出匹配次数() = /.../g 。

-l与-n使用会导致输入被“chomped”,所以这会从计数中删除换行符。

如果您只对空格(U + 0020)和制表符(U + 0009)感兴趣,则以下内容更快更简单:

perl -nE'say tr/ t//;'

在这两种情况下,都可以通过STDIN或通过参数命名的文件传递输入。

在Perl或Python中的正则表达式将是这里的方式。

Perl正则表达式

Python正则表达式

正则表达式备忘录

是的,可能需要第一时间学习“perl,schmerl,zwerl”,但是一旦你获得了像正则表达式这样的非常强大的工具的经验,它可以为您节省大量的时间。

计数空白:

sed 's/[^ ]//g' FILE | tr -d "n" | wc -c

文字之前,之后和之间。 你想在同一个行程中统计换行符,制表符等,然后总结出来,还是分开一步?

如果要计算pm.txt的space数量,则该命令将执行,

cat pm.txt | while read l; do echo $((`echo $l | wc -c` - `echo $l | tr -d ' ' | wc -c`)); done;

如果你想要计算space的数量, r , n , t使用这个,

cat pm.txt | while read l; do echo $((`echo $l | wc -c` - `echo $l | tr -d ' rnt' | wc -c`)); done;

read将剥离任何主角。 如果你不想要的话,有一个讨厌的方法。 首先拆分文件,使每个文件只有一行

`split -l 1 -d pm.txt`.

之后,会有一堆x*文件。 现在循环通过它。

for x in x*; do echo $((`cat $x | wc -c` - `cat $x | tr -d ' rnt' | wc -c`)); done;

通过rm x*删除这些文件;

如果Ruby计数(它确实计数

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐