Unix 模式匹配和创建多个LINUX文件

Unix 模式匹配和创建多个LINUX文件,unix,Unix,我有一个超过2000万行的管道分隔文件。在第4列中,我有一个日期字段。我必须从日期字段中获取部分值(YYYYMM),然后将匹配的数据写入一个新文件,并将其附加到文件名中。谢谢你的投入 Inputfile.txt XX|1234|PROCEDURES|20160101|RC XY|1634|PROCEDURES|20160115|RC XM|1245|CODES|20170124|RC XZ|1256|CODES|20170228|RC OutputFile_201601.txt XX|1234

我有一个超过2000万行的管道分隔文件。在第4列中,我有一个日期字段。我必须从日期字段中获取部分值(YYYYMM),然后将匹配的数据写入一个新文件,并将其附加到文件名中。谢谢你的投入

Inputfile.txt
XX|1234|PROCEDURES|20160101|RC
XY|1634|PROCEDURES|20160115|RC
XM|1245|CODES|20170124|RC
XZ|1256|CODES|20170228|RC

OutputFile_201601.txt
XX|1234|PROCEDURES|20160101|RC
XY|1634|PROCEDURES|20160115|RC

OutputFile_201701.txt
XM|1245|CODES|20170124|RC

OutputFile_201702.txt
XZ|1256|CODES|20170228|RC
使用awk:

$ awk -F\| '{f="outputfile_" substr($4,1,6) ".txt"; print >> f ; close (f)}' file
$ ls outputfile_201*
outputfile_201601.txt  outputfile_201701.txt  outputfile_201702.txt
解释:

$ awk -F\| '                               # pipe as delimiter
{
    f="outputfile_" substr($4,1,6) ".txt"  # form output filename
    print >> f                             # append record to file
    close(f)                               # close output file 
}' file

非常感谢您提供的解决方案,并详细解释了每个步骤。Awk简直太神奇了。只是好奇;拆分时是否可以从输出文件中删除第4列?当然可以。您只需定义
-vofs='|'
打印$1、$2、$3、$5>>f