問題タブ [awk]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
performance - 時間によって条件付けられた重複をすばやく見つける方法
AIX を使用しないマシンでPERL
は、同じ ID を持ち、4 時間の間に登録された場合に重複していると見なされるレコードをフィルター処理する必要があります。
私はこのフィルターを使用して実装しAWK
、かなりうまく機能しますが、もっと速い解決策が必要です:
unix - タイムスタンプを stdin の先頭に追加する Unix ユーティリティはありますか?
Python でこのための簡単なスクリプトを作成することになりましたが、各行の先頭にテキスト (私の場合はタイムスタンプ) を追加するテキストをフィードできるユーティリティがあるかどうか疑問に思っていました。理想的には、使用は次のようになります。
(あなたがsedに答える前に、私はこれを試しました:
ただし、sed の実行時に date コマンドが 1 回しか評価されないため、同じタイムスタンプが誤って各行の先頭に追加されます。)
arrays - awkでハッシュ/配列をソートする
awkで次のことを行う簡単な方法はありますか?
- データによる配列/ハッシュのソート
- 文字列キーによるハッシュのソート
awk - AWKを学ぶ理由はまだありますか?
私は問題に対して適切な解決策を使用するのが好きなので、昔ながらのツールでさえ、常に新しいツールを学んでいます。
それでも、それらのいくつかを学ぶ理由はまだあるのだろうか。awk
たとえば、私にとっては興味深いものですが、単純なテキスト処理の場合は、、、などを使用できますが、grep
複雑なテキスト処理の場合はPythonを使用します。cut
sed
だからといって、それが強力で便利なツールではないという意味ではありません。しかし、新しいツールを学ぶには時間とエネルギーがかかるので、それだけの価値はありますか?
perl - 現在のファイルの内容に基づいて awk から別のファイルを検索/読み取ることは可能ですか?
(GNU)awk
で巨大なファイルを処理しています (他の利用可能なツールは、Linux シェル ツール、古い (>5.0) バージョンの Perl ですが、モジュールをインストールできません)。
私の問題: field1、field2、field3 に X、Y、ZI が含まれている場合、field4 と field5 を 1 行に含む別のディレクトリでファイルを検索し、見つかったファイルのデータを現在の出力に挿入する必要があります。
例えば:
実際のファイル行:
ここで、たとえば別のファイルを (別のディレクトリで) 検索する必要があります。
元のファイルから STDOUT に書き込み、見つかったファイルから$0
、元のファイルの次の行を処理します。f2
f3
でそれを行うことは可能awk
ですか?
scripting - Awk スクリプトのヘルプ - ロジックの問題
私は現在、" o' " に一致する文字列の Exim ログ ファイルを解析するための単純な .sh スクリプトを作成しています。現在、output.txt を表示すると、すべての行 (606 行) に 0 が出力されます。awk はエラーをスローしないため、私のロジックが間違っていると思います。
これが私のコードです(連結とカウンターの問題のために更新されました)。編集: dmckee の回答からいくつかの新しいコードを採用しました。これは、単純さを優先して古いコードよりも現在作業しています。
何か案は?
編集: わかりやすくするために、メール アドレスの「o」を検索しています。これは、「」はメール アドレスでは無効な文字であるためです (データベースでは、o' がプレフィックスされた名前でのみ表示されます)。
編集 2: コメントの要求に従って、ここにいくつかの望ましい出力のサニタイズされたサンプルがあります:
ループで 20 から開始する理由は、20 番目のフィールドより前のすべてが標準のログ情報であり、ここでの目的には必要ないためです。このソリューションに必要なのは、IP とそれ以降のすべてです (各 550 エラーのメッセージは、使用されているメール サーバーごとに異なります。一般的なもののリストを編集しています)。
bash - パイプ区切りファイルからフィールドを出力するにはどうすればよいですか?
パイプ文字で区切られたフィールドを持つファイルがあり、2 番目のフィールドのみを印刷したいと考えています。この試みは失敗します:
これを行う方法はありますか?
error-handling - awk は存在しないファイルをレースなしでスキップできますか?
awk (gawk) に見つからないファイルを無視またはスキップさせる方法はありますか? つまり、ファイル システムに存在しなくなった、コマンド ラインで渡されたファイルです (たとえば、/proc/[1-9]* の下で急速に出現/消失するファイル)。
デフォルトでは、見つからないファイルは致命的なエラーです:-(
次のようなことと同等のことができるようにしたいと思います。
ラッパー スクリプトは、awk が実行される前にファイルが存在することを確認できません。これは、ファイルがチェックされてから awk がファイルを開こうとするまでの間にファイルが消える可能性があるためです。つまり、競合状態です。(タイミングはタイトですが、awk内でチェックしてから開くことも競合状態です)
windows - awkおよびWinGrepの正規表現
だから私はこのようなパターンを探しています:
size = '0x0'
ログファイルにありますが、私は大きなサイズ(4桁以上)にしか興味がありません。次の正規表現は、EditPadPro(優れたツールBTW)でうまく機能します
しかし、同じ正規表現はawkでは機能しません-繰り返し{4,}
がそれを台無しにしているようです。WinGrepと同じ-正規表現の達人からのアイデアはありますか?ありがとう!
awk - 最高のAwkコマンド
AWKは本当に便利だと思います。これが私がデータを操作するためにまとめたワンライナーです。
このAWKを使用して、一部のファイルの名前を変更し、選択した列のみを出力するスクリプトファイルを作成しました。誰かがこれを行うためのより良い方法を知っていますか?あなたは最高のAWKワンライナーまたは巧妙な操作は何ですか?