仅提取txt文件行中的数字

时间:2014-03-25 09:50:37

标签: sed awk grep gawk

某些命令的输出包含

 >> ..................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号作业完成后发生的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 但我不需要短语“工作清单”
  3. 请帮帮我。

    非常感谢你。

3 个答案:

答案 0 :(得分:2)

您可以使用:

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

答案 1 :(得分:1)

使用简单的工具:

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-

答案 2 :(得分:1)

你可以这样做:

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

在&#34; Jobs Done&#34;之后抓两行。 (-A2)然后查找&#34;工作列表&#34;使用awk并打印第4个字段。