2024-09-27 09:36:41 发布
网友
我有一个大文件(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
谢谢你!你知道吗
$ 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:
logA
s{\bA:(\d+)\b\K(?!\s+logA:)}{...
使用一行程序:
开关:
-i
:就地编辑<>
文件(如果提供了扩展名,则进行备份)-p
:为输入文件中的每一行创建一个while(<>){...; print}
循环。你知道吗-e
:告诉perl
在命令行上执行代码。你知道吗我要考虑做的一件事是添加一个过滤器,以确保键后面没有使用否定的lookahead断言的
logA
:相关问题 更多 >
编程相关推荐