Unix 模式匹配和创建多个LINUX文件
我有一个超过2000万行的管道分隔文件。在第4列中,我有一个日期字段。我必须从日期字段中获取部分值(YYYYMM),然后将匹配的数据写入一个新文件,并将其附加到文件名中。谢谢你的投入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
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