1

私は2つの入力ファイルを持っています

ファイル 1 :

ABC:client1:project1
XYZ:client2-aa:project2
DEF:client4:proj

ファイル 2 :

client1:W-170:xx
client2-aa:WT-04:yy
client4:L-005A:zz

また、有効な値の配列は [W,WT] のようにハードコーディングできます。

出力:

ABC:W:project1
XYZ:WT:project2

SO 基本的に、file1 の column2 が file2 のいずれかのレコードの column1 と一致する場合、file1 のその coulmn2 を file2 の column2 の一部に置き換えます。この部分を取得するには、"-" 演算子を使用して file2 の column2 を分割し、結果を配列と照合して有効な値を決定する必要があります。

上記の基準に一致しないレコードは、出力に表示されません。

私はシェルスクリプトを初めて使用するので、助けていただければ幸いです。私は数日から試していて、使用して列全体を置き換えることができました

awk -F":" 'NR==FNR{A[$1]=$2;next}$2 in A{$2=A[$2]}1' OFS=":" file2 file1. 

ただし、列の要件の一部を機能させることができませんでした。

4

2 に答える 2

2

あなたはとても近くにいます。関数awkを使用して探しているコードは次のとおりです。split

awk '
  BEGIN { OFS=FS=":" } 
  NR==FNR { split ($2,one,"-"); two[$1] = one[1]; next } 
  $2 in two { $2 = two[$2]; print }
' file2 file1

出力:

ABC:W:project1
XYZ:WT:project2
DEF:L:proj
于 2012-07-10T23:24:43.697 に答える
0

これはうまくいくかもしれません(GNU sed):

sed 's/^\([^:]*:\)\([^-]*\).*/s|:\1|:\2:|p/' file2 | sed -nf - file1

説明:

  • sed 's/^\([^:]*:\)\([^-]*\).*/s|:\1|:\2:|p/' file2置換を行う sed スクリプトを作成します。
  • sed -nf - file1sedそれを別のインスタンスにパイプして、目的のファイルに対して実行します

注意: 理解できない"Also, array of valid values can be hardcoded like [W,WT]"ので、これはあなたのニーズに完全には合わないかもしれません.

于 2012-07-11T07:25:44.927 に答える