Grep は、$MIDDLE に一致する項目を含む $START から $END までの行セットを探します。

Grep は、$MIDDLE に一致する項目を含む $START から $END までの行セットを探します。

Grep/Awk/Sed は、「0010|」から「0070|」までの行セットを検索し、$PH_NO に一致を含めます。

以下はサンプルデータです。 0012フィールドに表示される電話番号と対応する顧客レコード全体(0010から0070までの行)を見つけるにはgrepが必要です。データファイルには、同じ電話番号を持つ2〜3件の顧客履歴を含めることができ、それらをすべてインポートする必要があります。

0010|Kumar||57 Rich street|Chennai|Tamil Nadu|
0011|20171115| ID
0012|149 196 222| PH Number 
0013|20161101|20171102|
0022|Payment Method |Lucky customer|
0080|P|5.00-|20161111|Payment|
0080|P|5.00-|20161130|Payment|
0080|TP|10.00-|||
0070|000AYDCHDFF|820|762|
0010|RAM||57 Rich street|Chennai|Tamil Nadu|
0011|20171115| ID
0012|149 196 333| PH Number 
0013|20161101|20171102|
0022|Payment Method |Lucky customer|
0080|P|5.00-|20161111|Payment|
0080|P|5.00-|20161130|Payment|
0080|TP|10.00-|||
0070|000AYDCHDFF|820|762|
0010|Joe||57 Rich street|Chennai|Tamil Nadu|
0011|20171115| ID
0012|149 196 222| PH Number 
0013|20161101|20171102|
0022|Payment Method |Lucky customer|
0080|P|5.00-|20161111|Payment|
0080|P|5.00-|20161130|Payment|
0080|P|5.00-|20161111|Payment|
0080|P|5.00-|20161130|Payment|
0080|P|5.00-|20161111|Payment|
0080|P|5.00-|20161130|Payment|
0080|TP|10.00-|||
0070|000AYDCHDFF|820|762|

注:私はkshでAIXサーバーを使用しています。

ベストアンサー1

それでは、PH番号が一致した場合は、0010から0070までの全レコードが必要です$PH_NO"か?これでこのsedオネライナーが機能します。

sed "/^0010/,/^0070/H;/^0010/h;/^0070/! d;x;/|$PH_NO| PH Number/! d"
  • /^0010/,/^0070/H予約済みスペースに0010から0070のレコードを追加します。
  • /^0010/h0010は追加しないでくださいが、新しいレコードを開始するため、予約済みスペースにコピーされます。
  • /^0070/! d0070 項目以外の場合、処理や出力は発生しません。
  • x;/|$PH_NO| PH Number/! d"レコード全体がパターン空間になるようにスペースを変更し、その番号が含まれていない場合は削除します。

おすすめ記事