Ame*_*ina 2 sed regular-expression tr
假设我有一个包含以下两行的文件:
foo,bar,,baz,xy
foo,,bar,baz,xy,,
Run Code Online (Sandbox Code Playgroud)
我想计算,,
每行中有多少次(两个连续的逗号被任何其他字符包围)。
我的做法至今:我想我能先摆脱一切,但在每一行的任何一对连续的逗号,然后被一个逗号代替这两个逗号,这样我以后可以数得过来。我怎样才能做到这一点?
上面的答案应该是(如果我们用一个逗号代替双逗号,将其他所有内容都扔掉):
,
,,
Run Code Online (Sandbox Code Playgroud)
或者干脆:
1
2
Run Code Online (Sandbox Code Playgroud)
用于这项工作的 Perl 单线:
perl -nle 'print s/(^|[^,]),,([^,]|$)/$&/g' your_file
Run Code Online (Sandbox Code Playgroud)
或者,甚至更短,使用awk
:
awk -F',,' '{print NF-1}' your_file
Run Code Online (Sandbox Code Playgroud)
该awk
会认为,,,,
是两个事件,,
,而perl
一个不会在所有指望它。选择适合您的用例的一种。
更新
从您的评论来看,您的初衷似乎是计算每行空字段的数量。如果是这种情况,这个 Perl 单行应该有帮助(它假设没有包含逗号的带引号的字段):
perl -nle 'print scalar grep {//} split/,/' your_file
Run Code Online (Sandbox Code Playgroud)
awk
如果 Perl 不可用,同样如此:
awk -F, 'empty=0;{for(i=1;i<=NF;i++)if($i=="")empty++};{print empty}' your_file
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1197 次 |
最近记录: |