1

我是新来的awk,我被要求格式化以下csv文件(其中每一行代表一天,每个小时都有值)

3244,3138,3068,3083,3231,3624,3932,4018,4095,4195,4260,4328,4400,4431,4423,4418,4377,4331,4367,4354,4220,3919,3647,3415
3280,3187,3142,3165,3353,3772,4093,4126,4151,4180,4146,4141,4111,4071,4009,3942,3902,3871,3997,4005,3838,3657,3492,3332

.... 等等 5 天,在 7 个不同的文件中,格式如下:

4    UC.DB                                  
*************************                               
*                               
***************************                         
*                                       
7 UC_SYSTEM_SCHED,2;0,2;1,2;2,2;3,2;4,2;5,2;6,2;7,2;8,2;9,2;10,2;11,2;12,2;13,2;14,2;15,2;16,2;17,2;18,2;19,2;20,2;21,2;22,2;23
1,3244,3138,3068,3083,3231,3624,3932,4018,4095,4195,4260,4328,4400,4431,4423,4418,4377,4331,4367,4354,4220,3919,3647,3415   
 0                                      
*                               
 0                                      
0

目的是从一个CSV包含 7 个不同行的文件中创建 7 个具有这种格式的不同文件。如您所见,前 7 行对于创建的所有 7 个文件都是相同的(第 8 行中的“1”和第 9、10、11、12 行也将保持不变)。唯一的区别是每天导入的数据。

这是我到目前为止所尝试的:

awk -F "," NR==1'{printf "4, UC.DB\n***************\n*\n***************\n*\n7,UC_SYSTEM_SCHED,2;0,2;1,2;2,2;3,2;4,2;5,2;6,2;7,2;8,2;9,2;10,2;11,2;12,2;13,2;14,2;15,2;16,2;17,2;18,2;19,2;20,2;21,2;22,2;23\n1,"}''NR==1'UC_Load_Data.csv > awk.file

它适用于前 8 行,但是当我尝试添加最后 4 行时,我不断收到错误消息。

我知道这可能没有多大意义,而且理解起来令人困惑,但是,我非常感谢您的时间,希望您能帮助我。谢谢..!!!

4

1 回答 1

0

你的语法是错误的。您的:

awk -F "," NR==1'{printf "..."}''NR==1'UC_Load_Data.csv

在有效的 awk 语法中(并假设尾随 NR==1 是一个错字)将是:

awk -F "," 'NR==1{printf "...\n"}' UC_Load_Data.csv

我认为你想要的是这样的:

awk -F "," '
   BEGIN { hdr="4, UC.DB\n******"\n*\n*******\n*\n7,UC_SYSTEM_SCHED,2;0,2;...23\n" }
   { print hdr NR "," $0 > "file_" NR }
' UC_Load_Data.csv
于 2012-10-18T14:40:45.943 回答