2

我想从一个特定文件中复制第 30 行并将其粘贴到另一个文件的第 30 行。我无法手动执行此操作,因为文件太大(20 gb+)

我发现了如何将它附加到另一个文件的末尾:

awk 'NR==30' file1.txt >> file2.txt

你如何指定file2的行?

4

3 回答 3

1

awk

awk '
NR==30{line=$0;next}
NR==FNR{next}
FNR==30{$0=line}1
' file1 file2 > tmp && mv tmp file2
于 2013-07-17T15:11:45.117 回答
1

您不能使用该重定向机制。我可能会建议一个 Perl 脚本(或 Awk,因为您已经在使用 Awk),它只是读取一行,写入它,然后在适当的位置插入新行。

my $count = 0;
while (<INPUT>) {
   print OUTPUT $_;
   if ($count  == 30) {
      print OUTPUT $lineToBeInserted;
   }
   $count++;
}

请注意,它不会将整个文件存储在内存中,而是一次仅存储每一行​​。

于 2013-07-17T14:47:49.773 回答
0

使用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
于 2013-07-17T14:53:19.700 回答