我正在尝试以下操作:
/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