grepを使用したテキストファイルの比較

grepを使用したテキストファイルの比較

2つのファイルがあり、grepを使用して実行できるbyeを見つけたいのですが、問題はbyeがファイル1の最初の列と一致するものを見つけた後に発生します。

ファイル1

sss aa 0030 asa bb 0040

ファイル2

Hello, goodbye sjkd askdfj al;j asa but no I dont need this sfajkld goodbye sjakdlfja sss saklfj alkjfalskj

それはまるで

if(line has goodbye && nextline has first column in file 1) print the second column in file 1

ベストアンサー1

この試み:

awk '
  NR==FNR { a[$1] = $2 ; next }
  c && c-- && ($1 in a) { print a[$1] }
  /goodbye/ { c = 1 }
' File1 File2

動作原理:

NR==FNRここでは、最初のファイルを読み取るときにのみ保持される条件です。ここでは、最初のフィールドで定義したキーの下に2番目のフィールドを格納します。このnextステートメントを使用すると、最初のデータファイルの他の後続の条件は確認されません。

したがって、残りの条件は、2番目のファイルに対してのみ確認されます。一部の条件が満たされると(2番目のファイルのキーに従って)、最初のファイルからマップされた値を印刷しようとしc(もしそうなら、フラグは0に減少します)、現在のキー値は次のようになります。 beenマップに(最初のファイルの)キーとして存在しますa。最後に、c指定されたパターンと一致する条件がtrueの場合、フラグが設定されます。

おすすめ記事