2008-09-23 30 views
0

我需要有一個腳本讀取進來的文件和驗證檢查的信息。的Unix腳本讀取特定行和位置

在要讀取文件的第一行是日期,但以數字形式。例如:20080923 但在此之前的日期等信息,我需要從位置27含義線1點的位置27讀它,我需要得到該號碼,看它是否大於另一個號碼。

我使用grep命令檢查其他信息,但我使用特殊字符進行搜索,在這種情況下,信息之前的日期始終是不同的,所以我不能用文字來搜索上。它必須由1個線位置27

感謝來完成。

回答

5
sed 1q $file | cut -c27-34 

sed命令讀取該文件的第一行和cut命令扒出來的字符一行27-34,這就是你說的日期。

後來補充:

對於更一般的情況 - 你需要讀取線24,例如,而不是第一行,你需要一個稍微複雜sed命令:

sed -n -e 24p -e 24q | cut -c27-34 
sed -n '24p;24q' | cut -c27-34 

-n選項表示「不通過默認的打印線」; 24p表示打印行24; 24q表示在處理第24行後退出。您可以將其保留,在這種情況下,sed將繼續處理輸入,並有效地忽略它。

最後,特別是如果您要驗證日期,您可能希望將Perl用於整個工作(或Python,Ruby或Tcl或您選擇的任何腳本語言)。

+0

我應該可能已經添加了 - 或者,使用Perl並在相同的腳本中進行日期驗證,以便將數據截斷。 Python也可以用於這一點。您也可以在單個sed命令中完成所有操作: sed -n -e'1s/^。\ {26 \} \(........ \)。*/\ 1/p'$文件 但是,sed |切割很容易。 – 2008-09-23 17:59:39

1

可以提取字符開始第1行的27位像這樣:

datestring=`head -1 $file | cut -c27-` 

你會執行上$ datestring你的下一個處理步驟。

相關問題