【问题标题】:Searching for a string between two characters搜索两个字符之间的字符串
【发布时间】:2022-01-11 04:22:44
【问题描述】:

我需要从如下所示的行中找到两个数字

>Chr14:453901-458800

我有大量这些行与不包含“:”的行混合在一起,因此我们可以搜索冒号以找到带有数字的行。每行都有不同的数字。

我需要找到":" 之后的两个数字,它们之间用"-" 分隔,然后从第二个数字中减去第一个数字,然后在屏幕上为每一行打印结果

我希望使用 awk 完成此操作

我设法做到了这样的事情:

awk -e '$1 ~ /\:/ {print $0}' file.txt

但离最终结果还很远

对于我上面展示的这个例子,我的结果是:

4899

因为是458800 - 453901 = 4899的结果

我自己无法弄清楚,希望得到一些帮助

【问题讨论】:

  • 只是为了好玩:grep -o ':.*' file | tr :- -+ | bc(使用 GNU grep)

标签: bash awk


【解决方案1】:

使用 GNU awk。使用:- 分隔符将行分成多列。在包含:的每一行中,从第3列的内容中减去第2列的内容并打印结果。

awk -F '[:-]' '/:/{print $3-$2}' file

输出:

4899

【讨论】:

  • 我已经更新了我的答案。
【解决方案2】:

使用awk

$ awk -F: '/:/ {split($2,a,"-"); print a[2] - a[1]}' input_file
4899

【讨论】:

    猜你喜欢
    • 2011-01-30
    • 1970-01-01
    • 1970-01-01
    • 2013-01-20
    • 2016-01-08
    • 2012-05-18
    • 1970-01-01
    • 2015-01-11
    • 1970-01-01
    相关资源
    最近更新 更多