2017-03-31 84 views
0

文件的內容比較有如下總計數記錄,並用拖車記錄

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,等於總記錄上拖車(4)。

+0

您是否嘗試過自己解決問題? – Inian

+0

您想如何獲得輸出? – Inian

回答

0

我已經做了幾個假設:

  1. 將有永遠只能是你要算記錄和一個尾部記錄。也就是說,沒有其他類型的數據記錄,沒有標題,沒有額外的預告片或小計記錄。
  2. 在掛車記錄上,記錄計數將始終爲第三個字段,分隔符將始終爲管道(「|」)。

你沒有指定你正在使用什麼特定的操作系統或shell,所以你可能需要調整一些命令,由於細微的差異。

無論如何,這裏就是我想出了:

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

謝謝羅傑,工作完全正常,只需要上面的一個更多的信息,我如何通過文件名作爲參數在函數recchk(),以便這可以跨多個腳本使用。 –

+0

如果您將recchk()函數放入單獨的文件(如recchk.sh)中,則可以使用'source /recchk.sh'將其導入另一個腳本中。然後,您可以像使用其他腳本一樣使用rechchk()函數。 –

+0

假設我有5個文本文件,並且對於每個文件,我必須檢查記錄的總數並與拖車記錄進行比較,看它是否匹配。顯然5個文件會有不同的名稱,我想通過在函數recchk()中傳遞文件名來重用它們,我怎樣才能調用文件名 –