Awk: 解析节点名称出自 “40*r13n15:40*r10n61:40*r11n18:40*r09n15”

huangapple go评论70阅读模式
英文:

Awk: parse node names out of "40*r13n15:40*r10n61:40*r11n18:40*r09n15"

问题

以下是翻译好的内容:

我有一个用于选择节点的Linux脚本。

例如:

4
40*r13n15:40*r10n61:40*r11n18:40*r09n15

正确的结果应该是:

r13n15
r10n61
r11n18
r09n15

我的Linux脚本内容如下:

hostNum=`bjobs -X -o "nexec_host" $1 | grep -v NEXEC`
hostSer=`bjobs -X -o "exec_host" $1 | grep -v EXEC`

echo $hostNum
echo $hostSer

for i in `seq 1 $hostNum`
do
 echo $hostSer | awk -F ':' '{print $'$i'}' | awk -F '*' '{print $2}'
done

但不幸的是,我没有得到有关节点信息的任何内容。

我尝试过:

echo $hostSer | awk -F ':' '{print "$i"}' | awk -F '*' '{print $2}';


echo $hostSer | awk -F ':' '{print '\''"$i"'\''}' | awk -F '*' '{print $2}';

但都是错误的。谁能帮助我?
英文:

I have a linux script for selecting the node.

For example:

  4
  40*r13n15:40*r10n61:40*r11n18:40*r09n15

The correct result should be:

r13n15
r10n61
r11n18
r09n15

My linux script content is like:

hostNum=`bjobs -X -o "nexec_host" $1 | grep -v NEXEC`
hostSer=`bjobs -X -o "exec_host" $1 | grep -v EXEC`

echo $hostNum
echo $hostSer 

for i in `seq 1 $hostNum`
do
 echo $hostSer | awk -F ':' '{print '$i'}' | awk -F '*' '{print $2}'
done

But unlucky, I got nothing about node information.

I have tried:

echo $hostSer | awk -F ':' '{print "'$i'"}' | awk -F '*' '{print $2}'

and

echo $hostSer | awk -F ':' '{print '"$i"'}' | awk -F '*' '{print $2}'

But there are wrong. Who can give me a help?

答案1

得分: 3

通过将记录分隔符(`RS`)设置为`*:\n`,字符串被分割成单个标记,然后您可以只打印每2行(`NR%2==0`)。
英文:

One more awk:

$ echo "$variable" | awk 'NR%2==0'  RS='[*:\n]'
r13n15
r10n61
r11n18
r09n15

By setting the record separtor(RS) to *:\n , the string is broken into individual tokens, after which you can just print every 2nd line(NR%2==0).

答案2

得分: 2

你可以在awk中使用多个分隔符。请尝试以下:

h='40*r13n15:40*r10n61:40*r11n18:40*r09n15'
echo "$h" | awk -F '[:*]' '{ for (i=2; i<=NF; i+=2) print $i }'

**已根据RavinderSingh13的评论进行了编辑,使其更通用。

英文:

You can use multiple separators in awk. Please try below:

h=&#39;40*r13n15:40*r10n61:40*r11n18:40*r09n15&#39;
echo &quot;$h&quot;| awk -F &#39;[:*]&#39; &#39;{ for (i=2;i&lt;=NF;i+=2) print $i }&#39; 

**edited to make it generic based on the comment from RavinderSingh13.

huangapple
  • 本文由 发表于 2020年1月3日 17:32:00
  • 转载请务必保留本文链接:https://go.coder-hub.com/59576052.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定