awkコマンド、分割、繰り返し、ORSについて学びます。

awkコマンド、分割、繰り返し、ORSについて学びます。

分解して解読したいコードがあります。各段階で何が起こるかを案内してくれる人が必要です。

FNR==NR {
  if (split($1,a, "_") ==3)
  f1[$1]
next
}
NF{
if (split($1, a, "_") ==3 && $1 in f1)
  p=1
  rec=(!rec)?$0:rec ORS $0
next
}
p{
  print rec ORS
  p=0; rec=""
}

ベストアンサー1

NR処理されたレコードの総数(現在処理中のレコードを含む)は、FNR処理されたレコードの数です。現在のファイルに。これは最初のファイルでのみ発生します。

FNR==NR {
  if (split($1,a, "_") ==3)
  f1[$1]
next
}

今回もNF現在のレコードのフィールド数です。空行の場合、値はゼロで、これは「false」(「true」とは逆)なので、ブロックは空でない行に対してのみ実行されます。このブロックの値を設定するコードを書き留めますp。これは後で重要です。 ORS出力レコード区切り記号。これは、記録されたときに各レコードがどのように異なるかです。デフォルトは改行です。これはrec変数の値として条件付きで使用されます。

NF{
if (split($1, a, "_") ==3 && $1 in f1)
  p=1
  rec=(!rec)?$0:rec ORS $0
next
}

p最後のブロックは、値が「true」の場合にのみ実行されます。

p{
  print rec ORS
  p=0; rec=""
}

おすすめ記事