シェルスクリプトは、あるファイルの行番号を一致させ、一致すると、別のファイルにコメントとして配置します。

シェルスクリプトは、あるファイルの行番号を一致させ、一致すると、別のファイルにコメントとして配置します。

2つのファイルがあります。両方のファイルの内容は動的であり、必要に応じてシステムによって生成されます。

最初のファイルには、次の意味を持つ特定の行番号が含まれています。

head simdb.txt 
MSISDN
Account_ID
COSP_ID
Currency
Language
Home_Zone
SIM_PIN
Screening_PIN
Third_ParAnothercess_PIN
Cumulative_Incorrect_PIN

他のファイルには、次の動的データが含まれています。

head subscriber.txt
0='917598936722' 4='ENG' 6='1234'

出力は次のようになります。

0='917598936722'  //MSISDN
4='ENG'           //Language
6='1234'          //SIM_PIN

質問が更新されました========

上記のクエリに加えて、subscriber.txtに複数の行がある場合、スクリプトが最初に行を印刷してから目的の出力を印刷するにはどうすればよいですか?たとえば、次の subscriber.txt ファイルがある場合

head subscriber.txt
0='917598936722' 4='ENG' 6='1234'
0='919654680634' 4='ENG' 6='1234'

その後、希望の出力は次のようになります。

0='917598936722' 4='ENG' 6='1234'

0='917598936722'  //MSISDN
4='ENG'           //Language
6='1234'          //SIM_PIN

===========================================

0='919654680634' 4='ENG' 6='1234'

0='919654680634'  //MSISDN
4='ENG'           //Language
6='1234'          //SIM_PIN

ベストアンサー1

awk 'NR==FNR
    {Arr[NR-1]=$0;
    next}
    {for(i=1;i<=NF;i++)
    {split($i,a,"="); 
    print $i "    //"Arr[a[1]]}
    }'simdb.txt subscriber.txt
  • simdb.txtのすべての行を読み取り、配列に保存します。インデックスは0から始まります
  • 2番目のファイルを読み、等号の前の値が何であるかを確認してください。
  • Arrから値を読み取り、印刷します。

おすすめ記事