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

时间:2020-03-06 14:36:07  来源:igfitidea点击:

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

在要读取的文件的第一行上是日期,但采用数字形式。例如:20080923
但是在日期是其他信息之前,我需要从位置27读取它。意味着在行1的位置27,我需要获取该数字并查看其是否大于另一个数字。

我使用grep命令检查其他信息,但我使用特殊字符进行搜索,在这种情况下,日期之前的信息始终是不同的,因此无法使用字符进行搜索。必须通过第1行的位置27来完成。

谢谢。

解决方案

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行的位置27开始的字符,如下所示:

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

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