【问题标题】:Extract only numbers from a line of a txt file仅从 txt 文件的一行中提取数字
【发布时间】:2014-03-25 09:50:37
【问题描述】:

某个命令的输出包含

 >> ..................546 Jobs Retrieved 
    List of jobs Retrieved: 1-4,6-12,14,2017-2018 ............
 >>> 30 Jobs Done
    Jobs terminated: retrieve them with: crab -getoutput <List of jobs>
    List of jobs: 203,376,578,765,803,809,811
.....................

我只想提取第 30 行 Jobs Done 之后出现的 203,376,578,765,803,809,811。之后,我需要将此数字作为字符串放入某个变量中,以便在某些命令中使用它。我该怎么做。

我是这样试的:

  1. 我把输出放到了 status.log 文件中
  2. $ sed -e '1,/Jobs Done/d' status.log | grep "工作列表:" 然后我只有一条线 职位列表:578,765,811,836,1068,1096,1128 但我不需要短语“工作清单”

请帮帮我。

非常感谢您。

【问题讨论】:

  • 您在文件中显示的块是重复的,还是只重复一次? “作业列表”是否总是在“作业完成”之后正好 2 行?
  • 工作列表出现了几次,但完成的工作在输出中只出现了一次,是的,“工作列表”总是在“工作完成”之后正好 2 行。

标签: sed awk grep gawk


【解决方案1】:

你可以用这个:

awk '/30 Jobs Done/ {f=1;next} f && /List of jobs:/ {print $4;exit}' file
203,376,578,765,803,809,811

当它找到 30 Jobs Done 时,它会将标志 f 设置为 true。
如果然后找到List of jobs: 并且标志f 为真,则打印字段4

【讨论】:

  • 30 Jobs Done 可能是一个糟糕的模式\d+ Jobs Done 会好得多。另外,解释一下脚本的工作原理会很好。
  • @AaronDigulla 我不确定,OP 在30 Jobs Done 之后专门要求提供数据 PS \d+ 在我的awk 中不起作用,所以它会是[0-9]+ Jobs Done
  • @Jotne 谢谢。还有一件事:现在想将此命令的输出放入一个变量中,所以我使用 jobs=$(awk '/Jobs Done/ {f=1;next} f && /List of jobs:/ {print $4;exit }' status.log) 但它给出的错误是“非法变量名”。
  • 对我来说很好用:var=$(awk '/30 Jobs Done/ {f=1;next} f &amp;&amp; /List of jobs:/ {print $4;exit}' file)echo $var 203,376,578,765,803,809,811
  • 我不知道为什么,但这对我不起作用。还有其他选择吗?
【解决方案2】:

使用简单的工具:

egrep '^\s+List of jobs: [0-9,]+$' status.log | cut -d: -f2

egrep 的模式匹配整行,cut 返回 : 之后的所有内容。

这意味着您将在结果中获得前导空格。如果这是一个问题:

egrep '^\s+List of jobs: [0-9,]+$' status.log | cut -d: -f2 | cut -c2-

【讨论】:

    【解决方案3】:

    你可以这样做:

    grep -A2 "Jobs Done" yourfile | awk '/List of jobs:/{print $4}'
    

    在“作业完成”(-A2) 之后抓取两行,然后查找带有awk 的“作业列表”并打印第 4 个字段。

    【讨论】:

    • +1 为简单起见。我不知道为什么人们不喜欢使用管道。是不是这个功能让它如此受欢迎!
    猜你喜欢
    • 2022-12-16
    • 2017-09-16
    • 1970-01-01
    • 2013-07-03
    • 1970-01-01
    • 2013-01-10
    • 1970-01-01
    • 1970-01-01
    • 2016-07-26
    相关资源
    最近更新 更多