【发布时间】:2015-08-22 06:03:23
【问题描述】:
在 bash 中同时执行两个数组并使用 sed 将一个单词替换为每个单独文件中第二个数组中的单词时,我需要帮助。有两个列表:
List1 - 包含目录的名称,每个目录都有类似的参数文件“surfnet.par”(不同目录下的文件具有相同的名称“surfnet.par”)
List1.txt
3IT6_1
3IT6_3
3IT6_6
3IT6_9
3IT6_11
3IT6_12
3IT6_19
3IT6_23
3IT6_54
3IT6_62
List2 - 包含对应于每个目录的数字,必须用不同目录中存在的文件“surfnet.par”中的特定单词(单次出现)替换
List2.txt
11351
11357
11371
11384
11350
11373
11383
11365
11377
11382
为了更清楚
我想将List1的“3IT6_1”目录下“surfnet.par”中的一个单词“Resnum”替换为List2的“11351”,同样将3IT6_2的“surfnet.par”中的同一个单词替换为11357, 3IT6_3 与 11357,3IT6_6 与 11371 等等。
我尝试将列表推送到数组,然后使用 for 循环替换单词,但这样做失败了,因为它采用了 List2 的第一个值并替换了不同目录中的所有“surfnet.par”文件。我一直使用的脚本如下:
#!/bin/bash
declare -a dir
declare -a res
dir=(`cat "List1.txt" `)
res=(`cat 'List2.txt'`)
for i in "${dir[@]}"
do
echo $i
cd $i
sed -e "s/Resnum/${res$[0]}/g" surfnet.par > surfnet2.par
cd ..
done
如果你们中的任何人能帮助我解决此代码并指出需要进行的修改,我将不胜感激。如果我的代码没有任何意义,请使用 bash、awk、sed 或 perl 为我提供解决方案
【问题讨论】:
-
您的叙述说您想替换单词
Resnum,而您的代码替换LATHA。它是哪个,这个词在哪里指定? -
您使用的是哪个版本的
bash?readarray -t dir < Listdirs204.txt比使用cat更安全,因为它不会对文件的内容进行 shell 处理(分词、路径名生成等)。 -
抱歉用词不正确。我已将其更改为 Resnum。