我有 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,然后检查制表符或换行符之前的任何字符;如果找到,它将打印自动分割数组中的第一个字段和找到的字段。