使用AWK操纵CSV文件

时间:2012-10-18 14:23:53

标签: awk awk-formatting

我是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行时,我不断收到错误。

我知道它没有多大意义,理解是令人困惑的,然而,我很感激你的时间,希望你能帮助我。 谢谢.. !!!

1 个答案:

答案 0 :(得分: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