-1

我想使用 shell 脚本将一个文件中的一行粘贴到第二个文件的特定行。

我有 2 个文件 -file1file2. 我想粘贴第 5 行,file1使其显示为第 7 行file2,其中所有行file2也出现在输出中。

4

1 回答 1

1

当然,有多种方法可以做到这一点。

awk

awk 'NR == 5 { line5 = $0 }
     FNR != NR { print; if (FNR == 6) print line5 }' file1 file2

NR 为超记录数;脚本的第一行保存file1变量中的第 5 行line5。该FNR != NR条件适用于读取第二个文件;它打印该行,如果第二个文件中的行号是 6,它也会打印line5.

sed

sed -f <(sed -e '1,4d; 6,$d; x; s/.*/6a\\/;p; x' file1) file2

这使用bash 进程替换sed进程替换中的脚本删除了file1. 对于剩下的行,第 5 行,它交换模式空间和保持空间,编辑保持空间使其包含6a\并打印它,然后再次交换模式空间和保持空间,并(隐式)打印原始行。因此,它会生成一个脚本,例如:

6a\
All important line 5

这被提供给从第 6 行之后sed添加第 5行的第二个(外部) 。file1file2

file1

Garbage line 1
Garbage line 2
Garbage line 3
Garbage line 4
All important line 5
Garbage line 6
Garbage line 7
Garbage line 8
Garbage line 9

file2

This is line 1 in file2
This is line 2 in file2
This is line 3 in file2
This is line 4 in file2
This is line 5 in file2
This is line 6 in file2
This is line 7 in file2
This is line 8 in file2
This is line 9 in file2

输出

This is line 1 in file2
This is line 2 in file2
This is line 3 in file2
This is line 4 in file2
This is line 5 in file2
This is line 6 in file2
All important line 5
This is line 7 in file2
This is line 8 in file2
This is line 9 in file2
于 2013-09-30T06:52:51.200 回答