![grep 查找文件中的数组条目](https://linux22.com/image/739910/grep%20%E6%9F%A5%E6%89%BE%E6%96%87%E4%BB%B6%E4%B8%AD%E7%9A%84%E6%95%B0%E7%BB%84%E6%9D%A1%E7%9B%AE.png)
所以我有一个文件 step1 包含类似数据
field [T]:0.000
heatstart [s]: 1.50E+1
a[a],b[b],[c[c],d
1.02E-1,2.31E-1,...
1.50E+1,4.26E-1,...
...
以及一个名为 var4 的文件,其中仅包含条目1.50E+1
。我使用 mapfile 将此条目作为变量获取
mapfile -t var<var4
grep 可以用来搜索数据并给出行号
grep -n "${var[0]}" step1
使用这个只会给我步骤 1 第 2 行中的条目,而不是第 5 行中的条目。如果我将第 5 行中的条目复制到开头的另一行,我也无法使用 grep 获取它,但如果我将其复制到行中间的某个位置,grep 就会获取它。但如果我将文件步骤 1 粘贴到其自身,则不会获得其他结果。
我还尝试使用 sed 和 cut 获取 1.50E+1 的变量
sed -n '2p' < step1>var3
var4="$(cut -c15- var3)"
但这会导致同样的问题。变量中的数字前面没有空格,因为即使我删掉很多,以至于 1 不再存在于变量中,我也无法获得所有结果。有人知道为什么会发生这种情况或如何解决这个问题吗?
答案1
我认为您将会有很多 stepN 和 varN 文件?
我会像您一样使用 grep 的 -f 选项和 -n。
grep -n -f var4 step4
输出:
mdiehn@frank ~ $ grep !*
grep -n -f var4 step4
1:tstart [s]: 1.50E+1
4:1.50E+1,4.26E-1,...
如果您不想要 tstart,可以使用“grep -v”将其消除,或者我们可以进入一些更有趣的 awk 脚本。