我想弄清楚如何添加由
定义的files1
集的内容
ls /home/dir1/*-split.csv.*
然后将files1
中每个文件的内容添加到另一组文件中,例如
files2
ls /home/dir2/*.py.*.py
files1
和files2
这两套文件中的文件总数相同。
我已经设法使用
为1个文件工作files1=($home/dir1/'*'-split.csv.'*')
grep -h '^[^\s]*' $files1 | xargs -I '{}' sed -i s'/userid/{}/' /home/dir2/*.py.*.py
但我不知道如何将其转换为循环,以便将files1
中的文件插入files2
中的文件中。
如上所述,sed语句会将位于'userid'
的{{1}}中的files2
替换为位于/home/dir2/*.py.*.py
的{{1}}中文件的内容}。
files1
中的所有文件都包含/home/dir1/*-split.csv.*
,这是每次都使用files2
中的文件内容替换的字符串。
有没有人有任何想法?谢谢!
<小时/> 的修改
大家好,感谢您的评论并推动我做出更好的解释!
希望这会让事情变得更加清晰......像这样的文件列表......
'userid'
每个文件都包含一行文字,例如
files1
在files2中,我有4个文件的相应列表,例如
ls /home/dir1/*-split.csv.*
just-users-split.csv.aa
just-users-split.csv.ab
just-users-split.csv.ac
just-users-split.csv.ad
所有cat *.aa
"userPhD","userdegree","user123",
cat *.ab
"userxyz","userabc","user456"
文件都是彼此的副本,并包含ls /home/dir2/*.py.*.py
twud.py.1.py
twud.py.2.py
twud.py.3.py
twud.py.4.py
python脚本。
然后我要插入
的内容 *.py.*.py
加入91 line
just-users-split.csv.aa
加入twud.py.1.py
just-users-split.csv.ab
加入twud.py.2.py
just-users-split.csv.ac
加入twud.py.3.py
插入可以在* .py文件的顶部或底部完成,或者在理想的世界中,just-users-split.csv.ad
的内容将插入第33行以替换当前字符串{{1} }
最后,在这个例子中有4个文件要循环,但在其他情况下,可能有5,10或20对文件要循环。
这是否更有意义?
答案 0 :(得分:0)
您可以执行以下操作:
#!/bin/bash
files1=($(ls /home/dir1/*-split.csv.*))
files2=($(ls /home/dir2/*.py.*.py))
for (( i = 0; i < ${#files1[@]}; i++ )); do
content=($(sed -n 1p ${files1[$i]}))
sed -i "33s/.*/ids = $content/" ${files2[$i]}
done
for循环中的变量i
在[0,n)
范围内,n
是files1 / files2数组的大小。
在for循环的每一轮中,变量content
被分配到dir1
中文件的第一行。然后,此变量用于替换dir2
内的加工文件内容的第33行。
例如:
$ cat -n /home/dir1/just-users-split.csv.ab | sed -n '1p'
1 "userPhD","userdegree","user123"
$ cat -n /home/dir2/twud.py.1.py | sed -n '33p'
33 ids = "userid"
$ ./script
$ cat -n /home/dir2/twud.py.1.py | sed -n '33p'
33 ids = "userPhD","userdegree","user123"