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の場合、フラグが設定されます。