特定の列でawk検索


2

このようなファイルがあります(さらに多くの行があります)。

BeginJobID = S0065546 JESMSGLG(1/281)jname = CICWCMWDキュー= EXECUTION   JESMSGLG(2/281)BeginJobID = S0065568 jname = CICWWUWD queue = EXECUTION   JESMSGLG(3/281)jname = CICWMCWD BeginJobID = S0065569 queue = EXECUTION   JESMSGLG(4/281)jname = CICWTQ11キュー=実行BeginJobID = S0065599   BeginJobID = S0065600 JESMSGLG(5/281)キュー=実行jname = CICWFA11   JESMSGLG(6/281)jname = CICWFA21 BeginJobID = S0065601 queue = EXECUTION   JESMSGLG(7/281)jname = CICWFY11 BeginJobID = S0065602 queue = EXECUTION   BeginJobID = S0065603 JESMSGLG(8/281)jname = CICWFY21 queue = EXECUTION   BeginJobID = S0065604 JESMSGLG(9/281)jname = CICWFQ11 queue = EXECUTION   BeginJobID = S0065605 JESMSGLG(10/281)queue = EXECUTE jname = CICWFT11   JESMSGLG(11/281)jname = CICWFT21キュー=実行BeginJobID = S0065606   JESMSGLG(12/281)jname = CICWFT31キュー=実行BeginJobID = S0065607   JESMSGLG(13/281)jname = CICWFT41キュー=実行BeginJobID = S0065608   BeginJobID = S0065609 JESMSGLG(14/281)jname = CICWGA11 queue = EXECUTION   BeginJobID = S0065612 JESMSGLG(15/281)jname = CICWGA21 queue = EXECUTION   JESMSGLG(16/281)BeginJobID = S0065613 jname = CICWGQ11 queue = EXECUTION   BeginJobID = S0065614 JESMSGLG(17/281)queue = EXECUTE jname = CICWGY11   BeginJobID = S0065615 JESMSGLG(18/281)jname = CICWGT21 queue = EXECUTION   BeginJobID = S0065616 JESMSGLG(19/281)jname = CICWTT41 queue = EXECUTION   JESMSGLG(20/281)BeginJobID = S0065617 jname = CICWGT11 queue = EXECUTION

これら2つのレポートを作成するためのawkの簡単なコマンドを知りたいです。

  1. 実行中: awk_simple_command_(jname=) 結果:
CICWCMWD
CICWWUWD
CICWMCWD
CICWTQ11
CICWFA11
CICWFA21
CICWFY11
CICWFY21
CICWFQ11
CICWFT11
CICWFT21
CICWFT31
CICWFT41
CICWGA11
CICWGA21
CICWGQ11
CICWGY11
CICWGT21
CICWTT41
CICWGT11
  1. 実行中: awk_simple_command_(BeginJobID=) 結果:
S0065546
S0065568
S0065569
S0065599
S0065600
S0065601
S0065602
S0065603
S0065604
S0065605
S0065606
S0065607
S0065608
S0065609
S0065612
S0065613
S0065614
S0065615
S0065616
S0065617

データファイルにハードラインブレークが含まれていますか。それとも、カラムがスペースで区切られていますか。
Kenneth Murphy

回答:


1

入力データファイルにスペースで区切られた列が含まれ、改行が含まれていない場合、awkを使用して問題を解決する1つの方法があります。

reports.awk

BEGIN {
  /* Split records on the space character */
  RS=" ";
  /* Within each record, split the components (fields) on the '=' character */
  FS="=";
}
/* When the first field is the one requested (colname), 
   print the second field. */
$1 == colname { print $2; }

それでは、データファイルの名前が " データ 「プログラムを次のように起動することができます。

$ awk -f reports.awk colname = jnameデータ

もちろん、colname =を使用する jname またはcolname = BeginJobID どのデータを抽出したいかによって異なります。これはあなたが望む出力を生成するはずです。

データファイルがスペースの代わりに改行を使用することがある場合は、最初にそれらをスペースに変換し、結果をawkにパイプ処理する必要があります。

$猫 データ | tr "\ n" "" | awk -f reports.awk colname = BeginJobID -

また、頻繁に使用するのであれば、そのコマンドをシェルスクリプトに貼り付けることもできます。


とてもいい解決策です。
Alex Bermudez

私にとってはうまくいきます。どうもありがとうございました。
Alex Bermudez

0

あなたも使用を検討したいかもしれません grep

grep -o 'jname=[^ ]\+' infile | grep -o '[^=]\+$'

そして:

grep -o 'BeginJobId=[^ ]\+' infile | grep -o '[^=]\+$'
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.