Bash脚本优化:行复制



我有一个工作脚本,但它在大文件上相当慢。它只是将一堆行从一个文件复制到另一个文件的给定位置。下面是脚本:

#!/bin/bash
source_file="..."
dest_file="..."
first_line_to_copy=...
last_line_to_copy=...
dest_line=...
cat "$source_file" | sed -n "$first_line_to_copy,$last_line_to_copy p" | while IFS= read -r line;
do
sed -i "$dest_line i \$line" $dest_file
dest_line=$(($dest_line+1))
done

我没有成功地在一个sed命令中管理副本。所以它总是打开/关闭目标文件,寻找dest_line,这真的很耗时,有大量的行。

谢谢你的帮助

首先将[$first_line_to_copy,$last_line_to_copy]范围内的行复制到一个临时文件中,然后将该文件插入到指定的位置:

tempfile=/tmp/tempfile.$$
sed -n "$first_line_to_copy,$last_line_to_copy p" "$source_file" > "$tempfile"
sed -i.backup "$dest_line r $tempfile" "$dest_file"
rm -f "$tempfile"

最新更新