The UNIX and Linux Forums  
Helloやアメリカ合衆国へようこそ! UNIXおよびLinuxフォーラム!訪問し、当社のグローバルコミュニティに参加いただきありがとうございます。

Go Back   UNIXおよびLinuxフォーラム > トップフォーラム > シェルプログラミングとスクリプティング
Googleのunix.com



シェルプログラミングとスクリプティング KSH 、 CSH 、 shに、 bashの、はPerl 、 PHPは、削除するsed 、 Awkの、他のシェルスクリプトやシェルスクリプト言語についての質問の投稿はこちら。

Closed Thread
English Japanese Spanish French German Portuguese Italian Dutch Swedish Russian Norwegian Hungarian Hebrew Danish Bulgarian Greek を搭載 Powered by Google
 
LinkBack スレッドツール このスレッドを検索 スレッドを評価 表示モード
  #1固定リンク)  
Old 2008年11月17日
timj123 timj123 is offline
登録ユーザー
  
 

参加日: 2008年1月
投稿: 80
Awkのfuncionsヘルプ

私は自分のスクリプトでは問題がある。これは、大部分の作品が、とてもではない
ポータブル。例えば、以下の"入力ファイル"と切ると"スクリプトの貼り付けのサンプルです。

このスクリプトは以下のシステムが正常に動作部分として出力される次のように:

システムCFOのシステムダックスが続きます
ダックスTC制度システムが続きます
システムTC STETEM ONDが続きます

別のユニット部分のいくつかのシステムでは同じで出力されていません
ご注文や、一部のシステム部分のすべてに出力されていません。

私の質問に1つのシステムにどのように処理を停止するAwkの機能を変更できることです
次のシステムの部分で、起動処理は、次のシステムの部分
部分自体は、関数の例(ダックス)に記載されていません:
コード:
   while (( getline > 0 ) && ( $3 != "TC" )) {
コードの上の行は、 $ 3 TC 、次のシステムの部分は、その関数の処理が停止するようです。

ここに入力ファイルのサンプルです:

コード:
doal   cont   pegc   system1   call7   solh
RX SYSTEM CFO
DATE 322:47:34

DPORQ = 0        TTORQ = 0        DPINRQ= 0
MFINRQ= 0        CDIRR = 0        TCBSY = 0
TCINT = 0        TCANS = 0        TCRNG = 0
RPINRQ= 0        C6INRQ= 0        ISUPRQ= 11147
TUPRQ = 0        MFOURQ= 0        C6OURQ= 0
ISUPOR= 17417    BICCRQ= 0        BICCOR= 0
POVFL = 0

doal   cont   pegc   system1   call7   solh
RX SYSTEM DAX
DATE 322:47:34

proc   cpu    systm    load     sactv    orig    ovldpu   mmst
1      0        0        0        0        0        0        0
2      0        0        0        0        0        0        0
3      0        0        0        0        0        0        0
4      0        0        0        0        0        0        0
5      0        0        0        0        0        0        0
6      0        0        0        0        0        0        0
7      0        0        0        0        0        0        0
8      0        0        0        0        0        0        0
9      0        0        0        0        0        0        0
10     0        0        0        0        0        0        0
11     0        0        0        0        0        0        0

doal   cont   pegc   system1   call7   solh
RX SYSTEM TC
DATE 322:47:34

proc     pucco    load     chgro    chmert   chinc    chout    ceqpu
22       2        97       0        0        2707     6374     0
1        3        15011    0        0        2717     6651     0
2        3        12976    0        0        2139     6137     0
3        3        13898    0        0        2199     6583     0
4        3        15123    0        0        2478     7788     0
5        3        13823    0        0        2645     5789     0
ここにスクリプトのサンプルです:
コード:
/usr/xpg4/bin/awk '

$3 == "CFO"    { cFO() } 
$3 == "DAX"    { dAX() } 
$3 == "TC"     { tC()  } 


function dAX(     _xm)
{
   while (( getline > 0 ) && ( $3 != "TC" )) {

do a a lot of awk stuff here....
.
.
.
.
.
   }
}

function tC(     _msx)
{
   while (( getline > 0 ) && ( $3 != "OND" )) {

do a a lot of awk stuff here....
.
.
.
.
.
   }
}

function cFO(     _iu)
{
   while (( getline > 0 ) && ( $3 != "DAX" )) {

do a a lot of awk stuff here....
.
.
.
.
.
   }
} FILENAME
事前に感謝します。
  #2固定リンク)  
Old 2008年11月18日
timj123 timj123 is offline
登録ユーザー
  
 

参加日: 2008年1月
投稿: 80
あるかもしれないファイル全体の最初のセクションを決定するために次のシステムを読むための方法はありますか?これは、ファイルは実際に大きくしている私はこのことを避けるために欠けていた。
  #3固定リンク)  
Old 2008年11月19日
Annihilannic Annihilannic is offline Forum Advisor  
  
 

参加日: 2008年5月
場所:シドニー、オーストラリア
投稿数: 1009
なぜあなただけが停止する状態、すなわちときに" "ヒットdoal行は変更しないのですか?

コード:
    while (getline && $1 != "doal") {
場合は、 " doal "の行の内容の任意の処理を行うには、 whileループの後に行うことができます必要があります。
  #4固定リンク)  
Old 2008年11月19日
timj123 timj123 is offline
登録ユーザー
  
 

参加日: 2008年1月
投稿: 80
Annihilannic 、
これで私を探しにまず感謝。

しかし、残念ながら私は投稿して私は、データのみの抜粋された。場合によっては、データは以下の通り:

コード:
doal   cont   pegc   system1   call7   solh
RX SYSTEM CFO
DATE 322:47:34

DPORQ = 0        TTORQ = 0        DPINRQ= 0
MFINRQ= 0        CDIRR = 0        TCBSY = 0
TCINT = 0        TCANS = 0        TCRNG = 0
RPINRQ= 0        C6INRQ= 0        ISUPRQ= 11147
TUPRQ = 0        MFOURQ= 0        C6OURQ= 0
ISUPOR= 17417    BICCRQ= 0        BICCOR= 0
POVFL = 0

doal   cont   pegc   system1   call7   solh
RX SYSTEM CFO
DATE 322:47:34

DPORQ = 0        TTORQ = 0        DPINRQ= 0
MFINRQ= 0        CDIRR = 0        TCBSY = 0
TCINT = 0        TCANS = 0        TCRNG = 0
RPINRQ= 0        C6INRQ= 0        ISUPRQ= 11158
TUPRQ = 0        MFOURQ= 0        C6OURQ= 0
ISUPOR= 17459    BICCRQ= 0        BICCOR= 0
POVFL = 0

doal   cont   pegc   system1   call7   solh
RX SYSTEM DAX
DATE 322:47:34

proc   cpu    systm    load     sactv    orig    ovldpu   mmst
1      0        0        0        0        0        0        0
2      0        0        0        0        0        0        0
3      0        0        0        0        0        0        0
4      0        0        0        0        0        0        0
5      0        0        0        0        0        0        0
6      0        0        0        0        0        0        0
7      0        0        0        0        0        0        0
8      0        0        0        0        0        0        0
9      0        0        0        0        0        0        0
10     0        0        0        0        0        0        0
11     0        0        0        0        0        0        0
と私は1つのセクションの両方を処理する必要があります。しかし、私の他にどのように解決するために、可能であれば大体のでした。そのライン上の任意の処理を行うことなく、以下の行をテストする方法はありますか? ? ?私は未検証のコードを説明して試してみます:

コード:
while (( getline > 0 ) && ( $1 != "doal" ) && ( getline ; $3=! "CFO"))
私の場合は、 " " doalライン以下は$ 3をテストすることが可能です何と言っているのですか?
  #5固定リンク)  
Old 2008年11月19日
Annihilannic Annihilannic is offline Forum Advisor  
  
 

参加日: 2008年5月
場所:シドニー、オーストラリア
投稿数: 1009
それはあなたに助言するためのコードは、 whileループの中にやっていることを知らないと、難しいだろうが、やってみても、完全にそれらを使用しないようにお客様の立場で、何かもっとこのような:

コード:
awk '
        /^RX SYSTEM/ { section=$3 }
        section=="CFO" {
                print "processing CFO stuff: " $0
        }
        section=="DAX" {
                print "processing DAX stuff: " $0
        }
        section=="TC" {
                print "processing TC stuff: " $0
        }
' inputfile > outputfile
としては、変数に、それを読む"先"以降の行に格納することによって、それぞれの行を見るのは可能ですし、データ処理の変数に、その後のラインを読むときには、わずかな合併症では、最後の行を処理する必要が格納あなたのスクリプトの最後にデータの( )句。
Closed Thread

ブックマーク

スレッドツール このスレッドを検索
このスレッドを検索

高度な検索
表示モード このスレッド
このスレッド

投稿ルール
あなた ことができない。 新しいスレッドを投稿
あなた ことができない。 返信の投稿
あなた ことができない。 添付ファイルの投稿
あなた ことができない。 自分の投稿を編集

BBコード なる 〜の上に
スマイリー なる 〜の上に
[イメージ] コードは 〜の上に
HTMLコードは、 オフ
トラックバック なる 〜の上に
ピングバック なる 〜の上に
Refbacks なる 〜の上に




すべてGMT -4です。現在の時刻は 01:24午後


提供: vBulletin、著作権© 2000 - 2006、Jelsoft企業株式会社。言語翻訳による電源
vBCredits v1.4著作権© 2007 - 2008 、 PixelFXスタジオ
は、 UNIXおよびLinuxフォーラムのコンテンツ著作権© 1993 〜 2009 。すべての権利を管理しReserved.Ad RedTyger

コンテンツ関連のURLで vBSEO 3.2.0