-8

2 つのテキスト ファイルがあります。text-file-1 には文字列が含まれています (1 行に 1 つの文字列)。

C 010
C 020
C 024
.
.
.

テキスト ファイル 2 には、次の形式のデータが含まれています。

C 005 Carbon
D Carbon 1
D Carbon 2
D Carbon 3
D Carbon 4
C 010 Hydrogen
D Hydrogen 1
D Hydrogen 2
C 017 Oxygen
D Oxygen 1
C 020 Nitrogen
D Nitrogen 1
D Nitrogen 2
D Nitrogen 3
C 024 Sulphur
D Sulphur 1
D Sulphur 2
.
.
.

Text-file-1 には 30 行が含まれていますが、Text-file-2 には膨大なデータが含まれており、前述の形式と同じです。次のコマンドを使用して、Text-file-1 で見つかった Text-file-2 のテキストを grep できます。

awk 'NR==FNR { A[$2]=1; next }; A[$2]' Text-file-1 Text-file-2 > filename

このスクリプトの出力

C 010 Hydrogen
C 020 Nitrogen
C 024 Sulphur
.
.
.

私の望ましい出力は次のとおりです。

C 010 Hydrogen
D Hydrogen 1
D Hydrogen 2
C 020 Nitrogen
D Nitrogen 1
D Nitrogen 2
D Nitrogen 3
C 024 Sulphur
D Sulphur 1
D Sulphur 2
.
.
.

ここで、このコマンドの拡張機能が必要です。これにより、この行を含め、この行以降のすべての行 (「D」で始まる) を出力できます。Text-file-2 のすべての行は文字 (C または D) で始まっています。この手紙は私には役に立たないが、私は取っておいた. 親切に助けてください。

4

2 に答える 2

0
while read str; do sed -n "/^$str/,/^C/ {/^$str/p;/^D/p}" Text-file-2; done < Text-file-1

これは別のフォーラムで steeldriver によって提供された sed コマンドです。そして、その正常に動作します。

于 2013-09-18T17:45:42.533 に答える