に入れるsed
ようにコマンドを見つけようとします。これは2つの別々のファイルです。filename
filename1
入力は次filename
のとおりです。
Cindy 11 22 54
Chester 48 12 84
入力は次filename1
のとおりです。
Name Class1 Class2 Class3
Lee 92 94 88
Chancy 91 85 95
Dora 99 77 96
Jefferry 84 98 90
これが私が必要とする結果(出力)です。
Name Class1 Class2 Class3
Lee 92 94 88
Chancy 91 85 95
Dora 99 77 96
Cindy 11 22 54
Chester 48 12 84
Jefferry 84 98 90
明確にする必要がある場合は、お知らせください。デフォルトでは、CindyとChesterはDoraとJeffreyの間のどこかになければなりません。
答え1
コマンドを使用しての行をすべて追加するには、filename
次のようにします。filename1
sed
sed r filename1 filename
ただし、結果はお客様の質問に記載された結果と若干異なる場合があります。つまり、次のようになります。
Name Class1 Class2 Class3
Lee 92 94 88
Chancy 91 85 95
Dora 99 77 96
Jefferry 84 98 90
Cindy 11 22 54
Chester 48 12 84
編集する
sed
この質問に役立つ追加情報は次のとおりです。
filename
4行目の後に以下を追加しますfilename1
。sed '4 r filename' filename1
以下に
filename
「Dora」で始まる行を追加するにはfilename1
:sed '/^Dora/ r filename' filename1
filename
4行目の後に空のすべての行を追加および削除するには、次のようにしますfilename1
。sed '/^$/d;4 r filename' filename1
答え2
私の記憶が正しければ、順序がないでしょう。
この場合:
$ cat file2 file1 | column -t
Name Class1 Class2 Class3
Lee 92 94 88
Chancy 91 85 95
Dora 99 77 96
Jefferry 84 98 90
Cindy 11 22 54
Chester 48 12 84
答え3
これにより:
sed r file1 file2
...その後、名前付き入力ファイルの各入力行にNULL長ファイル名のeadファイルを追加しようとしsed
ましたが、失敗します。r
file1
そしてfile2
。このコマンドは、デフォルトでは次のコマンドと変わりません。
sed '' file1 file2
...遅い点だけを除けばr
。
これが私が意味するものです:
seq 1 5 > file1
seq 6 10 > file2
strace sed r file[12]
...
write("1\n", 21) = 2
open("", O_RDONLY) = -1 ENOENT (No such file or directory)
write("2\n", 21) = 2
open("", O_RDONLY) = -1 ENOENT (No such file or directory)
write("3\n", 21) = 2
open("", O_RDONLY) = -1 ENOENT (No such file or directory)
write("4\n", 21) = 2
open("", O_RDONLY) = -1 ENOENT (No such file or directory)
write("5\n", 21) = 2
open("", O_RDONLY) = -1 ENOENT (No such file or directory)
read(3, "", 4096) = 0
close(3) = 0
open("file2", RDONLY) = 3
write("6\n", 21) = 2
open("", O_RDONLY) = -1 ENOENT (No such file or directory)
write("7\n", 21) = 2
...
open("" ...)
故障状況を確認してくださいENOENT
書かれたすべての行に従いますか?空のr
eadコマンドがsed
実行されると、これが発生します。sed
仕様は、r
スクリプトで指定されている存在しないeadファイルについて文句を言いませんが、r
ファイルを読み取ろうとしたときに何も起こらなかったかのように続くので、これらの失敗は不明です。
たぶんそうかもそうだあるファイルを別のファイルの末尾に追加したいので、これはうまくいくようです。cat
両方のファイルをリンクします。sed
デフォルトでは、2つの入力ファイル名が指定されている場合は、最初のファイルを読み取り、次のファイルを読み取ります。ただし、r
eadコマンドが機能すると、名前付きr
eadファイルが完全に追加されます。すべて入力ライン。
このように:
seq 3 > file
printf %s\\n a b c |
sed r\ file
a
1
2
3
b
1
2
3
c
1
2
3
あるファイルの内容を別のファイルに追加するには:
cat < file2 >> file1
入力の特定のポイントの後にのみ追加するには、いくつかのオプションがあります。sed
中:
sed -e '/match/{r file2' -e:n -e 'n;bn' -e \} file1
...ほとんどすべての操作に使用できますsed
。
またはPOSIXがある場合sed
:
{ sed /match/q; cat file2 -; } < file1
...もっと効率的でしょう。
どちらの方法でもコンテンツfile2
一度だけ読み、inr
が最初に発生した直後にのみ読みます。match
file1
。
別の方法は次のとおりです。
cat file2 | sed /match/r\ /dev/fd/0 file1
...これは、最初のゲームの後に各ゲームの後に空の長さのファイルを読みます...