• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:AWKスクリプト作成法200606)

AWKスクリプト作成法についての質問

このQ&Aのポイント
  • AWKスクリプト作成法についての質問です。ファイル内のキーワードを含む行から指定された順序で並び替える方法を教えてください。
  • AWKスクリプト作成法についての質問です。ファイル内のキーワードを含む行から指定された順序で並び替える方法を教えてください。
  • AWKスクリプト作成法についての質問です。ファイル内のキーワードを含む行から指定された順序で並び替える方法を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.2

gawkを使っていいなら、以下のようにしてできます。 データが複数行にまたがるのでsortコマンドでは多分ダメかと。 簡単のため、データファイルフォーマットは キー データ本体1行目 データ本体2行目 ... END のように想定しています。また、あまり馬鹿でかいデータでないことを 期待しています。 BEGIN {  while ((getline < ARGV[1]) > 0) {   idx[i++] = $0  }  maxidx = i  ARGV[1] = ""  FS = "[\t\n]+"  ORS = RS = "END\n" } {  key = $1  data[key] = $0 } END {  for (i=0; i<maxidx; i++) {   key = idx[i]   printf "####%d番目のデータ####\n", i   print data[key]  } } 使い方は gawk -f このスクリプト インデクスファイル データファイル... です。 データフォーマットが複雑なら、それに応じてキーを取り出す 処理を追加してください。

Kasaoka-Taroh
質問者

お礼

さすがに,わかっている方は美しいスクリプトを書かれますね。大変参考 になりました。これを参考にして,作ってみます。 ありがとうございました。

その他の回答 (1)

  • a-saitoh
  • ベストアンサー率30% (524/1722)
回答No.1

対象範囲のデータを全部配列にでも溜めていって、ENDを見つけたところで並べ替えて出力するしかないでしょう。 配列の内容の並べ替えは、普通に直接選択法でも何でも。 ただ、awkは対象部分の切り出しだけに専念して並べ替えはsortコマンドに任せる方が楽だと思います。

関連するQ&A

専門家に質問してみよう