将文件中的模式替换为列表中的模式,递归,每行

将文件中的模式替换为列表中的模式,递归,每行

我正在尝试以下操作:

/dir1/textfile
/dir2/textfile
/dir3/textfile

“textfile”始终具有相同的内容,一个简单的数字(400)。

现在,我有一个包含不同数字的数据文件,每个值都在新行上(所以每行一个数字)

我想要做的是将“textfile”(400)中的值替换为数据文件中的值,但数字必须与我的数据文件中的条目相对应,因此:

datafile
14
25
335

14应该写成dir1/textfile

25应该写成dir2/textfile

335应该写成dir3/textfile

等等...

我玩过sed,但到目前为止还没有找到任何可行的解决方案。有任何想法吗?

答案1

awk

awk '{print $0 > "dir"NR"/textfile"}' datafile
  • NR扩展到当前记录号,因此每一行将保存在dir<line_number>/textfile例如第一行将保存在dir1/textfile,第二行将保存在dir2/textfile等等。

无需昂贵的while文件行循环,并执行操作:

i=1; while IFS= read -r line; do echo "$line" >dir"$i"/textfile; ((i++)); done <datafile

上面的shell方式只是展示方法,大家应该按照awk方式来。


根据评论进行编辑:

要将所有 s 替换400为 中所需的数字datafile

i=1; while IFS= read -r line; do sed "s/400/$line/g" dir"$i"/textfile; ((i++)); done <datafile

对于就地编辑文件:

i=1; while IFS= read -r line; do sed -i "s/400/$line/g" dir"$i"/textfile; ((i++)); done <datafile

备份的原始文件.bak扩展名:

i=1; while IFS= read -r line; do sed -i.bak "s/400/$line/g" dir"$i"/textfile; ((i++)); done <datafile

相关内容