gpt4 book ai didi

linux - 使用 UNIX 或 perl 从文本文件的每一行中提取特定文本

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:48:46 28 4
gpt4 key购买 nike

我有一个包含如下行的文本文件:

Sequences (1:4) Aligned. Score:  4
Sequences (100:3011) Aligned. Score: 77
Sequences (12:345) Aligned. Score: 100
...

我希望能够将这些值提取到一个新的制表符分隔的文本文件中:

1 4 4
100 3011 77
12 345 100

(像这样,但用制表符代替空格)

任何人都可以提出任何建议吗?可能是 sed 或 cut 的某种组合?

最佳答案

您可以使用 Perl:

cat data.txt | perl -pe 's/.*?(\d+):(\d+).*?(\d+)/$1\t$2\t$3/'

或者,保存到文件:

cat data.txt | perl -pe 's/.*?(\d+):(\d+).*?(\d+)/$1\t$2\t$3/' > data2.txt

小解释:

此处的正则表达式为:

s/RULES_HOW_TO_MATCH/HOW_TO_REPLACE/

如何匹配=.*?(\d+):(\d+).*?(\d+)

如何替换 = $1\t$2\t$3

在我们的例子中,我们使用以下标记来声明我们希望如何匹配字符串:

  • .*? - 尽可能多地匹配任何字符 ('.') ('*'),只要该字符不匹配正则表达式中的下一个标记(在我们的例子中是\d)。

  • \d+:\d+ - 匹配至少一个数字后跟冒号和另一个数字

  • .*? - 同上

  • \d+ - 匹配至少一位数字

此外,如果正则表达式中的某些标记在括号中,则表示“保存它以便我以后可以引用它”。第一个括号将被称为“$1”,第二个括号将被称为“$2”等。在我们的例子中:

.*?(\d+):(\d+).*?(\d+)
$1 $2 $3

最后,我们将 $1、$2、$3 打印出来,用制表符 (\t) 分隔:

$1\t$2\t$3

关于linux - 使用 UNIX 或 perl 从文本文件的每一行中提取特定文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15281582/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com