将一行复制粘贴到bash中相同位置的另一个文件中

时间:2013-07-17 14:43:01

标签: bash sed awk

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

我已经找到了如何将它附加到另一个文件的末尾:

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

如何指定file2的行?

3 个答案:

答案 0 :(得分:1)

您无法使用该重定向机制。我可能会建议一个Perl脚本(或者awk,假设你已经使用了Awk),它只是读取一行,写入它,并在适当的位置滑入新行。

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

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

答案 1 :(得分:1)

使用awk

awk '
NR==30{line=$0;next}
NR==FNR{next}
FNR==30{$0=line}1
' file1 file2 > tmp && mv tmp file2

答案 2 :(得分: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