处理大文件:如何找到所有空格分隔的对“名称:编号“插入一对”logname:日志(number)“就在匹配的pai之后

2024-09-27 09:36:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个大文件(20G),其中每一行包含许多空格分隔的标记。对于一个特定的单词a,我想找到所有的记号a:number,然后插入一对新的记号logA:日志(数字)就在匹配令牌之后。你知道吗

输入示例:

A:164605 B C D:23 A:223425

期望输出:

A:164605 logA:5.21 B C D:23 A:223425 logA:5.349

谢谢你!你知道吗


Tags: 文件标记示例number数字单词空格记号
2条回答
$ cat tst.awk
{
    for (i=1; i<=NF; i++)
        if ( sub(/^A:/,"",$i) )
            $i = sprintf("A:%s logA:%.3f",$i,log($i)/log(10))
    print
}
$ awk -f tst.awk file
A:164605 logA:5.216 B C D:23 A:223425 logA:5.349

使用一行程序:

perl -i -pe 's{\bA:(\d+)\b\K}{sprintf " logA:%.3f", log($1) / log(10)}eg' file.txt

开关

  • -i:就地编辑<>文件(如果提供了扩展名,则进行备份)
  • -p:为输入文件中的每一行创建一个while(<>){...; print}循环。你知道吗
  • -e:告诉perl在命令行上执行代码。你知道吗

我要考虑做的一件事是添加一个过滤器,以确保键后面没有使用否定的lookahead断言的logA

s{\bA:(\d+)\b\K(?!\s+logA:)}{...

相关问题 更多 >

    热门问题