Unix脚本读取特定的行和位置

时间:2008-09-23 14:25:37

标签: unix

我需要让脚本读取进来的文件并检查信息以进行验证。

在要读取的文件的第一行是日期,但是以数字形式。例如:20080923 但在日期是其他信息之前,我需要从位置27读取它。意思是第1行第27位,我需要得到那个数字,看看它是否大于另一个数字。

我使用grep命令检查其他信息,但我使用特殊字符进行搜索,在这种情况下,日期之前的信息总是不同,所以我不能使用字符进行搜索。它必须由第1行第27位完成。

2 个答案:

答案 0 :(得分: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,或您选择的任何脚本语言)。

答案 1 :(得分:1)

您可以从第1行的第27位开始提取字符,如下所示:

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

您将在$ datestring上执行下一个处理步骤。