このヒントは役に立ちますが、まだ少し迷っています。私はその非常に単純な形式を盗みます。 別のファイルのパターン(タグ)の前にあるファイルの内容を挿入するには?
2つのファイルがあります。
ファイル1
test
test2
test3
test4
ファイル2
Numebr of results: 0
Numebr of results: 1
Object Name:
Object UID: {A42CD268-ommitted}
Class Name: referral
last_element: false
referral_info: source
referral_obj: Name: ommitted (Table: ommitted)
scheme_flags: 0
type: member
Numebr of results: 0
Numebr of results: 0
希望の最終結果(ファイル3?)
test
Numebr of results: 0
test2
Numebr of results: 1
Object Name:
Object UID: {A42CD268-ommitted}
Class Name: referral
last_element: false
referral_info: source
referral_obj: Name: ommitted (Table: ommitted)
scheme_flags: 0
type: member
test3
Numebr of results: 0
test4
Numebr of results: 0
file1 から一度に 1 行ずつ読み込み、「結果数」の次のパターンを探し、最初の一致項目の上の file1 に line1 を挿入し、ファイル全体を順番に繰り返そうとします。
よろしくお願いします!
答え1
使用することをお勧めします行/変数/ファイルのインポート形awk
getline
$ awk '/^Numebr of results/ {if (getline line < "file1" > 0) print line} 1' file2
test
Numebr of results: 0
test2
Numebr of results: 1
Object Name:
Object UID: {A42CD268-ommitted}
Class Name: referral
last_element: false
referral_info: source
referral_obj: Name: ommitted (Table: ommitted)
scheme_flags: 0
type: member
test3
Numebr of results: 0
test4
Numebr of results: 0
答え2
$ awk 'NR==FNR{A[NR]=$0;next}{if($0~/^Numebr of results/){i++;print A[i]}}1' file1 file2
test
Numebr of results: 0
test2
Numebr of results: 1
Object Name:
Object UID: {A42CD268-ommitted}
Class Name: referral
last_element: false
referral_info: source
referral_obj: Name: ommitted (Table: ommitted)
scheme_flags: 0
type: member
test3
Numebr of results: 0
test4
Numebr of results: 0
答え3
で行うことができますが、より適切になりますsed
:awk
エコ"--" | catファイル1 - ファイル2 | sed -n '1,/----/{H;d} /Numebr/ {x;s/^\n//;P;s /[^\n]*\n//;x;};
答え4
私は単にファイル記述子を管理するためにサブシェルを使用します。 (「exec 3>&-」は不要)
サブプロセスに継承されたファイル記述子
これらのファイル記述子を使用すると、各読み取り操作は以下のファイルの場所を移動します。
「e」オプションは、パターン空間文字列をshのコマンドとして実行します。
sh$ ( exec 3< file2;
sed -r '
/^Number of results: [0-9]+/ {
h
s#.*#read line <\&3; echo -n "$line"#e
G
}
' file1;
)