シェル スクリプトを使用して、あるファイルの行を 2 番目のファイルの特定の行に貼り付けたいと考えています。
2 つのファイルがあります —file1
とfile2
. からの 5 行目を貼り付けたいfile1
ので、 の 7 行として表示されfile2
、 からのすべての行file2
も出力に表示されます。
もちろん、これを行うには複数の方法があります。
awk
awk 'NR == 5 { line5 = $0 }
FNR != NR { print; if (FNR == 6) print line5 }' file1 file2
NR はオーバー レコード番号です。file1
スクリプトの最初の行は、変数の 5 行目を保存しますline5
。このFNR != NR
条件は、2 番目のファイルを読み取るときに適用されます。行を出力し、2 番目のファイルの行番号が 6 の場合は、line5
.
sed
sed -f <(sed -e '1,4d; 6,$d; x; s/.*/6a\\/;p; x' file1) file2
これはbash
プロセス置換を使用します。プロセス置換内のsed
スクリプトは、 の行 1 ~ 4 および 6-EOF を削除しますfile1
。残りの 5 行目では、パターン スペースとホールド スペースを交換し、ホールド スペースが含まれるように編集して6a\
出力し、パターン スペースとホールド スペースを再度交換して、(暗黙的に) 元の行を出力します。したがって、次のようなスクリプトが生成されます。
6a\
All important line 5
これは、 の6 行目以降にsed
5 行目を追加する 2 番目 (外側) に提供されます。file1
file2
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