gpt4 book ai didi

sed - 在循环内使用 sed 的替代方法

转载 作者:行者123 更新时间:2023-12-04 00:57:35 27 4
gpt4 key购买 nike

我想用包含一行的文件替换一个大文件的多行(非连续的)行。我发现有用的是

for i in ${list[@]}; do
line=$(cat file_$i.txt);
sed -i "$i c $line" bigfile.txt;
done

这里,list 包含我要替换的行。这是一个例子:

$ list=(1 3 4 7)
$ cat file_1.txt
this is the new line 1
$ cat file_3.txt
this is the new line 3
$ cat file_4.txt
this is the new line 4
$ cat file_7.txt
this is the new line 7

$ cat bigfile.txt
line 1
line 2
line 3
line 4
line 5
line 6
line 7
line 8

上面脚本的输出是

$ cat bigfile.txt 
newline 1
line 2
newline 3
newline 4
line 5
line 6
newline 7
line 8

它有效,但是在循环的每一步中,sed 打开并读取整个文件,据我所知,所以这种方法非常慢。还有什么其他更快的方法可以做到这一点,最好是使用 sed

最佳答案

可能的解决方案:

sed "$(for i in $list; do echo "$i c $(cat file_$i.txt)"; done)" bigfile.txt

($list 可能必须是 ${list[@]}${list[*]} 或其他任何东西,取决于它是如何构建的。)

您的原始循环用于构建一个 Sed 脚本,其中每一行都像 1 c content_of_file_1_dot_txt;此脚本随后仅在 bigfile.txt 上运行一次。

关于sed - 在循环内使用 sed 的替代方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61162488/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com