我是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行时,我不断收到错误。
我知道它没有多大意义,理解是令人困惑的,然而,我很感激你的时间,希望你能帮助我。 谢谢.. !!!
答案 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