-1

シェル スクリプトを使用して、あるファイルの行を 2 番目のファイルの特定の行に貼り付けたいと考えています。

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条件は、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 行目以降にsed5 行目を追加する 2 番目 (外側) に提供されます。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 に答える