我目前正在尝试编写一个简单的shell脚本,该脚本将读取文件,查找某个字符串,然后打印该字符串和几个字符。这个请求的上下文是我有一组我想要运行的数据文件。这些文件包含一堆元素电离值。我正在尝试找到元素并打印出其电离值。
这里的问题是数据文件还包含某些电离的元素温度,因此至少有两个不同的实例,元素将出现在文件中。每个数据文件都非常标准,所以我可以通过计算我想要的元素出现并打印出那个,但是我想知道是否有更好的方法来做到这一点。假设首先找到节标题“电离值”的位置,然后打印出发生的第一个所述元素值。
这有意义吗?如果没有,请不要犹豫要求澄清!
以下是输入内容的示例:
for ( var i = 0 ; i < x.length ; i++) {
至于输出,我真正需要的只是元素的值。打印到控制台很好
提前致谢。
答案 0 :(得分:0)
您可以将其保存在文件中并使用2个参数调用它,第一个是元素的名称,第二个是要搜索的文件的名称。元素名称区分大小写:
#!/bin/sh
sed -n "
/Log10 Mean Ionisation (over radius)/,/^[[:space:]]*$/ {
/^${1:?}/ p
}
" "${2:?}"
默认情况下sed
命令不打印任何内容(-n
),然后,对于“Log10 Mean Ionisation(over radius)”和下一个空白行之间的行,它将搜索模式( element)由第一个脚本参数给出,在行的开头(/^${1:?}
),如果找到,则打印行(p
)。
引用位置参数的${1:?}
和${2:?}
表示法会导致shell打印错误消息,并在未设置任何参数时退出。