关于shell:Bash脚本:读取文本行内的数字

Bash script: reading numbers inside a text line

我有一个文件catalog.dat,包含如下行:

1
event_017_3916.gz

我需要提取这行的第一个数字(017)。这个数字是启动另一个程序(program.c)所必需的,它需要输入数字才能启动(也就是说,它应该像$program.c 017那样使用)。实际上,我只需要构建一个命令,比如:

1
PROGRAM.C 017

在我的shell脚本中。我的问题是:如何读取017并将其设置为可用于构建命令的变量?非常感谢你的帮助!


1
2
3
while IFS=_ read event first_num rest ; do
    echo"PROGRAM.C $first_num"
done <CATALOG.dat


我的解决方案:

1
awk -F"_" '{print $2}' | xargs -n1 PROGRAM.C


解决方案:在awk

1
awk -F_ '{print $2}' file

定界符集是一个_版画(-F_)和第二(print $2场()是存储在017)

槽运行文件和保存它到一个变量($line包含017):

1
2
3
4
5
while read line
do
  echo"> $line"
  PROGRAM.C $line
done < <(awk -F_ '{print $2}' file)

此外,你可以使用xargsto execute命令有:

1
awk -F_ '{print $2}' file | xargs PROGRAM.C

这是executes PROGRAM.C xyz线为每一个文件,在xzy是提取数字。