我想从一个特定文件中复制第 30 行并将其粘贴到另一个文件的第 30 行。我无法手动执行此操作,因为文件太大(20 gb+)
我发现了如何将它附加到另一个文件的末尾:
awk 'NR==30' file1.txt >> file2.txt
你如何指定file2的行?
与awk
:
awk '
NR==30{line=$0;next}
NR==FNR{next}
FNR==30{$0=line}1
' file1 file2 > tmp && mv tmp file2
您不能使用该重定向机制。我可能会建议一个 Perl 脚本(或 Awk,因为您已经在使用 Awk),它只是读取一行,写入它,然后在适当的位置插入新行。
my $count = 0;
while (<INPUT>) {
print OUTPUT $_;
if ($count == 30) {
print OUTPUT $lineToBeInserted;
}
$count++;
}
请注意,它不会将整个文件存储在内存中,而是一次仅存储每一行。
使用sed:
sed -i "30i $(sed -n '30p' file1.txt)" file2.txt
内部命令从 file1.txt 中提取第 30 行
target_line=$(sed -n '30p' file1)
外部命令将该文本插入到 file2.txt 的第 30 行
sed -i "30i $target_line" file2.txt