awk—打印具有特殊字符的定长线

awk—打印具有特殊字符的定长线,awk,Awk,我使用下面的命令从固定长度的文件中提取特定的行。 每条线的长度为748 awk 'substr($0,8,2)=="04"' test.dat > output.dat 假设test.dat有100行。在输出文件中,我看到一些行少于748个字符 是因为awk在处理特殊通道时正在运输管线吗?如果是这样的话,我们有没有办法避免呢 从下面的答案中,我了解到POSIX awk将不可空和其他特殊字符。sed或grep还有其他选项可以帮我吗?将null转换为空格对我来说不是问题,所以我使用下面的命令

我使用下面的命令从固定长度的文件中提取特定的行。 每条线的长度为748

awk 'substr($0,8,2)=="04"' test.dat > output.dat
假设test.dat有100行。在输出文件中,我看到一些行少于748个字符

是因为awk在处理特殊通道时正在运输管线吗?如果是这样的话,我们有没有办法避免呢


从下面的答案中,我了解到POSIX awk将不可空和其他特殊字符。sed或grep还有其他选项可以帮我吗?

将null转换为空格对我来说不是问题,所以我使用下面的命令来获取所需的数据


perl-pe's/\000//g'Inputfile | awk'substr($0,64,2)=“04”>Outputfile

将空值转换为空间对我来说不是问题,所以我使用下面的命令来获取所需的数据


perl-pe's/\000//g'Inputfile | awk'substr($0,64,2)==“04””>Outputfile

唯一会导致任何问题的特殊字符是换行符。在你的748个字符长的记录中嵌入了任何新行吗?是的,最后一个字符是NeXLIEI均值,当你看到一个小于预期的748个字符的行时,这是因为在记录中间有一个换行符(它被切断)。?我不认为你会是一个新行,但我们在数据文件中看到了许多/0。我创建了一个文件,在该行中嵌入了
\0
,而普通awk截断了那里的记录,正如你所看到的。然而,当我尝试使用gawk时,它打印了整行内容。如果你可以访问gawk,也许可以试试看它是否对你更合适。唯一会引起任何问题的特殊角色是换行符。在你的748个字符长的记录中嵌入了任何新行吗?是的,最后一个字符是NeXLIEI均值,当你看到一个小于预期的748个字符的行时,这是因为在记录中间有一个换行符(它被切断)。?我不认为你会是一个新行,但我们在数据文件中看到了许多/0。我创建了一个文件,在该行中嵌入了
\0
,而普通awk截断了那里的记录,正如你所看到的。然而,当我尝试使用gawk时,它打印了整行内容。如果你可以使用gawk,也许可以试试看它是否对你更有效。