过滤文件中的字段,没有恒定的记录格式

过滤文件中的字段,没有恒定的记录格式

我有 3 个文件,每个文件有数百万条记录。我想过滤这些文件以便更轻松地找到一些数据。不幸的是,一条记录与另一条记录之间没有通用的格式。例如:

record1 will contain: A B C D E
record2 will contain A B D E
record3 will contain B C D

我拥有的唯一共同部分是前 23 个字符,其中包含一些标识符(其中只有最后 15 个字符在记录之间是唯一的)。

我想过滤这些文件以包含标识符和 D 部分。我怎样才能做到这一点?我知道字段之间的分隔符是制表符,并且每个部分内部都有逗号。

D部分的例子:

ROAMENT,INT,15
ROAMENT - constant part which identifies the field
INT - some value which is a must if ROAMENT exists
15 - some other value which is optional

答案1

perl -ane 'if (/\t(ROAMENT[^\t\n]*)/) { print $F[0], $1, "\n"; }' inputfile

解释:

  • -a调用自动拆分,将输入字段拆分到 @F 数组中。任何空格都会分割字段,如果您只需要制表符,则可以添加-F"\t"
  • -n对输入数据调用自动循环,而不是在最后打印输入行
  • -e定义在每个循环中运行的表达式
  • 该表达式检查 < tab >ROAMENT,然后检查制表符或换行符之前的任何字符;如果找到,它将打印自动分割数组中的第一个字段和找到的字段。

相关内容