首页 > 解决方案 > 如何确认两个作业信息之间是否存在节点?

问题描述

在我的项目中,我有 pbs 工作信息文件:JobInfofile

JobInfofile 的一些内容是这样的:

1089608.mu01            maad-zhangy cal-l    ct+gd+sdg-160FWH  25025    22    528       --   72:00:00 R  07:20:52
   cu222/0-23+cu206/0-23+cu191/0-23+cu186/0-23+cu175/0-23+cu163/0-23+cu158/0-23
   +cu142/0-23+cu125/0-23+cu124/0-23+cu118/0-23+cu116/0-23+cu115/0-23
   +cu114/0-23+cu113/0-23+cu112/0-23+cu111/0-23+cu110/0-23+cu109/0-23
   +cu108/0-23+cu089/0-23+cu047/0-23
1090225.mu01            phy-xiel    cal-l    multijobs.pbs     21540    20    480       --   72:00:00 R  46:00:54
   cu198/0-23+cu144/0-23+cu123/0-23+cu122/0-23+cu121/0-23+cu120/0-23+cu119/0-23
   +cu098/0-23+cu095/0-23+cu094/0-23+cu092/0-23+cu091/0-23+cu087/0-23
   +cu086/0-23+cu085/0-23+cu083/0-23+cu081/0-23+cu080/0-23+cu079/0-23
   +cu076/0-23
1091846.mu01            maad-huangy cal-l    Re26Ro01-02       13256     6    144       --   72:00:00 R  32:35:35
   cu200/0-23+cu105/0-23+cu069/0-23+cu068/0-23+cu067/0-23+cu066/0-23
1092285.mu01            maad-zhoukc cal-l    Iso_Driven_Hoff_  30786     6    144       --   72:00:00 R  29:18:04
   cu172/0-23+cu171/0-23+cu164/0-23+cu155/0-23+cu101/0-23+cu100/0-23
1092768.mu01            maad-zhoukc cal-l    Iso_Driven_Hon1E   3271     6    144       --   72:00:00 R  27:35:55
   cu036/0-23+cu035/0-23+cu034/0-23+cu033/0-23+cu032/0-23+cu031/0-23
1092804.mu01            maad-zhoukc cal-l    Iso_Driven_Hon5E   9137     6    144       --   72:00:00 R  27:34:03
   cu030/0-23+cu029/0-23+cu028/0-23+cu027/0-23+cu026/0-23+cu025/0-23
1092805.mu01            maad-leeh   cal-l    DINO               5942    18    432       --   72:00:00 R  27:23:35
   cu084/0-23+cu062/0-23+cu059/0-23+cu058/0-23+cu057/0-23+cu056/0-23+cu052/0-23
   +cu051/0-23+cu048/0-23+cu041/0-23+cu024/0-23+cu022/0-23+cu021/0-23
   +cu016/0-23+cu011/0-23+cu005/0-23+cu004/0-23+cu003/0-23

现在我想确认在节点上运行的选定作业。

例如:作业 1089608 正在节点上运行:

cu222/0-23+cu206/0-23+cu191/0-23+cu186/0-23+cu175/0-23+cu163/0-23+cu158/0-23
+cu142/0-23+cu125/0-23+cu124/0-23+cu118/0-23+cu116/0-23+cu115/0-23
+cu114/0-23+cu113/0-23+cu112/0-23+cu111/0-23+cu110/0-23+cu109/0-23
+cu108/0-23+cu089/0-23+cu047/0-23

作业 1091846 正在节点上运行:

cu200/0-23+cu105/0-23+cu069/0-23+cu068/0-23+cu067/0-23+cu066/0-23

我努力了:

  grep 1091846 JobInfofile | grep cu105

结果是错误的,因为“1091846”和“cu105”在不同的行。

我试过另一种方式:

grep -A 1 1091846 JobInfofile | grep cu105

可以,但对于以下情况是错误的:

grep -A 1 1089608 JobInfofile | grep cu108

有没有办法确认所选节点存在于 mu01 和 mu01 之间?

例如,对于工作 1089608,我只关心 1089608.mu01 和 1090225.mu01 之间的节点内容

标签: shellawksed

解决方案


Could you please try following, though not completely sure. Where val is a variable where you could mention value which you want to search.

awk -v val="1089608" '
/^[0-9]{7}/{
  flag=""
}
/^[0-9]{7}/ && substr($0,1,7)==val{
  flag=1
  print $1
  next
}
flag
'   Input_file

推荐阅读