2017-03-31 6 views
0

内容と比較するには、以下のようにIは4であり、実際のレコードラインを比較する必要がカウント合計ファイル内のレコードとトレーラレコードファイルの

101,abc,2017-03-15,Linux 
222,xyz,2016-10-10,Unix 
987,def,2017-01-03,Solaris 
567,tek,2014-01-09,windows 
Trailer|20170331|4 

あるトレーラー(4)上の合計レコードに等しいです。

+0

問題を自分で解決しようとしましたか? – Inian

+0

あなたはどのように出力を得たいですか? – Inian

答えて

0

私は仮定のカップル作りました:

  1. だけ今まであなたがカウントするレコードと単一のトレーラレコードが存在します。つまり、他のタイプのデータレコード、ヘッダー、余分なトレーラーまたは小計レコードはありません。
  2. トレーラーレコードでは、レコード数は常に3番目のフィールドになり、区切り文字は常にパイプ( "|")になります。

あなたが使用している特定のOSやシェルを指定していないため、軽微な違いのためにいくつかのコマンドを調整する必要があるかもしれません。とにかく

は、ここに私が思い付いたものです:

recchk() 
{ 
    #Here's the file we're working with: 
    myfile=testfile.txt 

    #Let's figure out how many records are in it 
    recs=`wc -l $myfile | cut -f1 -d" "` 

    #Now subtract 1 because we don't want to count the trailer 
    let recs=`expr $recs - 1` 

    echo "There are $recs data records in the file." 

    #Now we'll find the trailer record and get the third field 
    trcnt=`tail -1 $myfile | cut -f3 -d"|"` 

    echo "Trailer says there are $trcnt records." 

    #Now we'll check to make sure all is well. 
    if [ $recs -ne $trcnt ]; then 
    echo "Uh-oh! They don't match\!" 
    else 
    echo "Right on, daddy-o\! We're righteous\!" 
    fi 
} 

は、この情報がお役に立てば幸い!

+0

Rogerさん、ありがとうございました。上記の情報をもう1つ必要です。関数recchk()のパラメータとしてファイル名を渡すことができます。これを複数のスクリプトにわたって使用することができます。 –

+0

recchk()関数をrecchk.shのような別のファイルに置くと、 'source /recchk.sh'を使って別のスクリプトにインポートすることができます。次に、rechchk()関数を他のスクリプトにあるかのように使用できます。 –

+0

私は5つのテキストファイルがあり、各ファイルのために、私はレコードの合計数をチェックし、トレーラーのレコードと比較し、それが一致するかどうかを確認する必要があります。明らかに5つのファイルは異なる名前を持ち、recchk()関数でファイル名を渡して再利用したいのですが、どのようにファイル名を呼び出すことができますか? –

関連する問題