修复竖线分隔文件中字段内的不平衡双引号问题
修复竖线分隔文件中不平衡的双引号
你的问题出在原来的Perl命令逻辑上——它是按整行统计引号数量,如果总数是奇数就删除所有引号,但这会误删那些本来成对的引号(比如Mike" |35 |"Consultant"|10.0 |这行总共有3个引号,奇数,原命令会把"Consultant"的引号也删掉,不符合你的期望)。
我们需要换个思路:按字段处理,只删除那些单个字段内不平衡的引号(即字段内引号数为奇数的情况),成对的引号保留。
正确的Perl命令
perl -F'\|' -lane 'foreach my $f (@F) { $f =~ s/"//g if ($f =~ tr/"// % 2 != 0); } print join("|", @F)' your_file.txt
命令解释
-F'\|':指定竖线|为字段分隔符,把每行分割成数组@F-lane:自动处理换行、开启数组模式,让我们能方便操作每个字段- 遍历每个字段
$f:$f =~ tr/"//:统计当前字段内的双引号数量(tr操作返回匹配的次数)- 如果数量是奇数(不平衡),就用
s/"//g删除该字段内所有双引号 - 如果是偶数(成对),则保留原字段内容
join("|", @F):把处理后的字段重新用竖线连接,输出整行
测试效果
用你的原始文件测试,输出完全符合期望:
name |age|role |experience|
John |25 |Developer |2.56 |
Scot x|30 |Tester |5.2 |
Jim |28 |DBA |3.0 |
Mike |35 |"Consultant"|10.0 |
Daniel|26 |Developer |3.2 |
Paul |29 |Tester |3.6 |
Peter |30 |Developer |6.5 |
内容的提问来源于stack exchange,提问作者stack0114106
相关产品推荐
相关产品推荐

