![]() |
|
|
Googleのunix.com
|
|||||||
| シェルプログラミングとスクリプティング KSH 、 CSH 、 shに、 bashの、はPerl 、 PHPは、削除するsed 、 Awkの、他のシェルスクリプトやシェルスクリプト言語についての質問の投稿はこちら。 |
その他のUNIXおよびLinuxフォーラムトピックは参考にすること
|
||||
| スレッド | スレッドスターター | フォーラム | 返信 | 最後の投稿 |
| レコードがどのようなUnixのファイルからレコードを読むこと | raoscb | UNIXのダミー質問と回答のため | 1 | 2008年5月16日 07:30午前 |
| スクリプトをファイルにして、不良ファイル内のレコードをかけるに不正なレコードを検索する | shilendrajadon | シェルプログラミングとスクリプティング | 2 | 2007年12月28日 10:02午前 |
| スクリプトをファイルにして、不良ファイル内のレコードをかけるに不正なレコードを検索する | shilendrajadon | UNIXの詳細&エキスパートのためのユーザー | 1 | 2007年12月28日 午前10時 |
| 分裂を記録し、ファイルにレコードを追加する | rsolap | シェルプログラミングとスクリプティング | 1 | 2007年8月13日 02:58午後 |
| ( )括弧内の一致するテキストを選択してください | 筆記 | UNIXのダミー質問と回答のため | 4 | 2007年4月20日 03:14午前 |
![]() |
|
|
LinkBack | スレッドツール | このスレッドを検索 | スレッドを評価 | 表示モード |
|
|
|
||||
|
1つのファイルから2つ目のファイルからのAwkを使用して一致するレコードを選択してください
助けてください
![]() 私は2つの入力ファイルがあると私は2つに基づいてレポートを生成したいのですが。 filea : 、 account1 、パスワード、ホスト名 、 account2 、パスワード 、 account1 、パスワード、ホスト名 、 account1 、パスワード、ホスト名 、 account1 、パスワード 、 account2 、パスワード ホスト名を空白を繰り返している fileb : ギボウシ属の草本 hostb hostc 私は" fileb内のすべてのホストに対しては、 filea内の特定のアカウントのアカウントのパスワードを発生するホスト名"の記録を生成する必要があります。すなわち、私fileb内のすべてのホスト用のルートパスワードのリストを表示します。私が使用しているけれど、それを実装するためのスクリプトのロジックを知っているスキルを持っていない。私は、簡単な方法のAwk fileaのホスト名との空白を埋めるために使用することを単純に新しいfileaのfileb内の各ホストにはgrepするためのシェルスクリプトを使用している。 他の方法のいずれかのアカウントまたはホスト名が異なっている一致していますし、その結果を印刷するまでfileb内の各ホスト名をfileaを実行することです。そのアカウントは、与えられたホスト名が存在しないためには何もありません。 私は手動での高速たぶん私は間違っていただろうが、思考することによって、このスクリプトを保存しようとしている ![]() よりエレガントなので、ここに私には難しいだろうな方法はこれまでに付属しているフレームワークです ![]() # ! / bin / shに # ホスト\u003d `猫hosts.txt ` ホスト名\u003d " x "の \u003d " x "の最後の ホストの名前を$ ( )の する #は、 Awkのロジックをここに来ると 完了した |
|
||||
|
引用:
この問題を明確にするには、 fileaとホスト名を繰り返しているのブランクがある場合、ルートの記録にどのようにレコードのホスト名を得ることはしないしているホスト名ですか?ホスト名を探している私の前に空白以外のレコードです。 例: ギボウシ属の草本、 johndoe 、 abc123 は、 root 、 4009dlkj hostb 、 janedoe 、 rrrrrr 場合には、ホストを根絶するために期待されているfileb ギボウシ属の草本は、 root 、 4009dlkj 私は以前の非ブランクのレコードからはホスト名を使用しようとするとawkは空白に置き換えていたが、私はエラーが発生していた。私も1ドルを変数に格納できませんでしたし、テストを印刷してください。わたしは知っている セッド 非常に強力ですが、私はこの1行で行われるかもしれないと考えていませんでした。 私はそれを手動で最後の夜を終えた。それを知りたい好奇心の場合、私は再びそれを持っている現時点では便利になるかもしれない。 ティア |
|
||||
|
ああ、私はあなたの問題を説明誤解。が期待されているここにあなたが言ったんだと思う。 コード:
awk -F , -v acct=root 'NR==FNR { h[$1]++; next; }
{ if($1 == "") $1=host; host=$1; if (! h[$1]) next;
if ($2 == acct) print }' fileb filea
その NR \u003d\u003d FNR 条件に該当する中 fileb 読み込まれている。これは一般的です awkは メインの処理を行う前に補助データをファイルに読み取り用熟語。ホスト名に fileb 配列するために使用される 時間。の次に、スクリプトの本体、ご使用の場合、最初のフィールドが空白の場合、値 主人 変数に使用される $ 1。その後1ドルの現在の値で記憶されるだろう 主人 次の行(秒)が空の最初のフィールドの場合。次に、その配列 時間 現在のホスト名が含まれていない(これには存在ではなかったの意味 fileb)は、現在の行はスキップされます。最後に、 2番目のフィールドには、変数の場合と同じです acct、行印刷されています。 ( awkは本当に古い亜種の変数を渡すのをサポートしていない - vを 見つけることができる場合、オプション-この問題を抱えている場合は、参照してください nawk または mawk または のろま お使いのシステム、またはXPG4 Awkの。または直接スクリプトに、変数を補間することができます。 ) |
|
||||
|
引用:
私は、ブロックを使用するには、ファイルの読み込みを開始しようとしていたが、 Awkのマニュアルをもとに2つのファイルから読み込む方法を見つけ出すことができなかった。 Awkのファイルからどのように説明を読むことを決定ていただけませんか?は括弧の最初のセット内のコードは、 ( )は、 2つ目のファイルを設定ファイルの最初の2つ目の供給を読み取るか? ありがとうございました。私はより多くのことを学んだ! |