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上执行下一个处理步骤。