-3

テキストファイル-1

SAR001
SAR005
SAR008
SAR010
SAR012
.
.
.

テキストファイル-2

C 0001 Carbon [C]
D SAR001 methane [CH3]
D SAR002 ethane
D SAR003 propane
D SAR004 butane
D SAR005 pentane
C 0002 Hydrogen [H]
D SAR006 hydronium
D SAR007 water [H20]
C 0003 Nitrogen [N]
D SAR008 ammonia [NH3]
D SAR009 ammonium chloride [NH4Cl]
D SAR010 amide
C 0004 Oxygen [O]
D SAR011 ozone
D SAR012 super oxide
.
.
.

望ましい出力

SAR001 Carbon [C]
SAR005 Carbon [C]
SAR008 Nitrogen [N]
SAR010 Nitrogen [N]
SAR012 Oxygen [O]
.
.
.

私のクエリは、textfile-2 の textfile-1 からの grep テキストであり、その後、「C」で始まる上記の行の 3 番目の列を出力します。シェルまたは perl ベースのスクリプトは大歓迎です。OpenSUSE Linux を使用しています。

よろしく。

4

1 に答える 1

1

あなたが試すことができます、

perl -anE '
  BEGIN{ open($f,pop)||die$! }
  if ($F[2]) { $c = $F[2]; next }
  $s{ $F[1] } = $c;
  END{
    s|\s+$||, s|$| $s{$_}|, say while <$f>;
  }
' textfile-2 textfile-1

出力

SAR001 Carbon
SAR005 Carbon
SAR008 Nitrogen
SAR010 Nitrogen
SAR012 Oxygen

perl -ne '
  BEGIN{ open($f,pop)||die$! }
  @F = split /\s+/, $_, 3;
  if (!/SAR/) { $c = $F[2]; next }
  $s{ $F[1] } = $c;
  END{
    s|\s+$||, s|$| $s{$_}|, print while <$f>;
  }
' textfile-2 textfile-1

出力

SAR001 Carbon [C]
SAR005 Carbon [C]
SAR008 Nitrogen [N]
SAR010 Nitrogen [N]
SAR012 Oxygen [O]
于 2013-09-27T12:38:05.490 に答える