gpt4 book ai didi

linux - 使用 Awk 处理每条记录具有不同固定宽度字段的文件

转载 作者:IT王子 更新时间:2023-10-29 00:47:08 29 4
gpt4 key购买 nike

我有一些来自遗留系统的数据文件,我想使用 Awk 处理这些文件。每个文件都包含一个记录列表。有几种不同的记录类型,每种记录类型都有一组不同的固定宽度字段(没有字段分隔符)。记录的前两个字符表示类型,由此您可以知道应该遵循哪些字段。文件可能看起来像这样:

AAField1Field2LongerField3
BBField4Field5Field6VeryVeryLongField7Field8
CCField99

使用 Gawk 我可以设置 FIELDWIDTHS , 但这适用于整个文件(除非我缺少在逐个记录的基础上设置它的某种方法),或者我可以将 FS 设置为 ""并一次处理文件一个字符,但这有点很麻烦。

有没有使用 Awk 从此类文件中提取字段的好方法?

编辑:是的,我可以使用 Perl(或其他语言)。不过,我仍然很想知道是否有使用 Awk 的明智方法。

最佳答案

希望这会引导您朝着正确的方向前进。假设您的多行记录保证由“CC”类型的行终止,您可以使用简单的 if-then 逻辑预处理文本文件。我假设您需要在一行中包含字段 1、5 和 7,并且需要一个示例 awk 脚本。

BEGIN {
field1=""
field5=""
field7=""
}
{
record_type = substr($0,1,2)
if (record_type == "AA")
{
field1=substr($0,3,6)
}
else if (record_type == "BB")
{
field5=substr($0,9,6)
field7=substr($0,21,18)
}
else if (record_type == "CC")
{
print field1"|"field5"|"field7
}
}

创建一个名为 program.awk 的 awk 脚本文件,并将该代码弹出到其中。执行脚本使用:

awk -f program.awk < my_multi_line_file.txt 

关于linux - 使用 Awk 处理每条记录具有不同固定宽度字段的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1393489/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com