Hi All,
I have the sales_data.csv file in the directory as below.
SDDCCR; SOM ; MD6546474777 ;05-JAN-16
ABC ; KIRAN ; CB789 ;04-JAN-16
ABC ; RAMANA; KS566767477747 ;06-JAN-16
ABC ; KAMESH; A33535335 ;04-JAN-16
SDDCCR; DINESH; GD6674474747 ;08-JAN-16
SDDCCR; SUJAN ; SA6666464664646;05-JAN-16
XYZ ; AMAR ; AB123456 ;04-JAN-16
XYZ ; RAJ ; CS78890 ;04-JAN-16
XYZ ; GANE ; MD6546474777 ;08-JAN-16
XXX ; MANO ; MD6546474777 ;04-JAN-16
I want to split the file as below based on last column value.
sales_data04-JAN-16.csv
ABC ; KIRAN ; CB789 ;
ABC ; KAMESH; A33535335 ;
XYZ ; AMAR ; AB123456 ;
XYZ ; RAJ ; CS78890 ;
XXX ; MANO ; MD6546474777 ;
sales_data05-JAN-16.csv
SDDCCR; SOM ; MD6546474777 ;
SDDCCR; SUJAN ; SA6666464664646;
sales_data06-JAN-16.csv
ABC ; RAMANA; KS566767477747 ;
sales_data08-JAN-16.csv
SDDCCR; DINESH; GD6674474747 ;
XYZ ; GANE ; MD6546474777 ;
I have tried the following script but its working.
#!/bin/ksh
file_name=sales_data.csv
file_format=$4
awk ' NR==1 {HD = $1 OFS $2 OFS $3; next; next} {FN = DIR"/sales_data" file_out
if (!(Se[FN]++)) print HD > FN
print $1, $2, $3 > FN}' FS=' *; *' OFS=";" DIR="$SAL_DIR" file_out="$file_format" $SAL_DIR/$file_name
if [ $? -ne 0 ]
then
echo "report generation failed"
fin_anormale $0
fi
#End of File
Please help me.
Thanks.
---------- Post updated at 07:04 PM ---------- Previous update was at 06:31 PM ----------
Sorry I forgot.Please help me.
---------- Post updated at 07:27 PM ---------- Previous update was at 07:04 PM ----------
Hi All,
Please help me ASAP.
Thanks.
RudiC
2
ASAP is a highly deprecated term in these forums.
---------- Post updated at 16:24 ---------- Previous update was at 16:19 ----------
How about
awk -F";" '{print > "sales_data" $4 ".csv"}' file
1 Like
$4 should not be included:
awk -F\; '{f= "sales_data" $4 ".csv"; $4=""; print > f}' OFS=\; file
looney
4
hi
awk 'BEGIN{FS=OFS=";"} FNR==NR{a[$4]=$4;next} $4 in a{print $1 OFS $2 OFS $3 ";" >> "sales_date"a[$4]".csv" }' file file
---------- Post updated at 03:01 PM ---------- Previous update was at 02:30 PM ----------
Or
awk -F";" '{print $1";"$2";"$3 > "sales_data" $4 ".csv"}' file
Hi All,
Thanks a lot to all.
I forgot to mention one thing the sales_data.csv is having heading.
SCID NAME SCODE CREATE_DATE
SDDCCR; SOM ; MD6546474777 ;05-JAN-16
ABC ; KIRAN ; CB789 ;04-JAN-16
ABC ; RAMANA; KS566767477747 ;06-JAN-16
ABC ; KAMESH; A33535335 ;04-JAN-16
SDDCCR; DINESH; GD6674474747 ;08-JAN-16
SDDCCR; SUJAN ; SA6666464664646;05-JAN-16
XYZ ; AMAR ; AB123456 ;04-JAN-16
XYZ ; RAJ ; CS78890 ;04-JAN-16
XYZ ; GANE ; MD6546474777 ;08-JAN-16
XXX ; MANO ; MD6546474777 ;04-JAN-16
I need heading for every split file as below.
sales_data04-JAN-16.csv
SCID NAME SCODE
ABC ; KIRAN ; CB789 ;
ABC ; KAMESH; A33535335 ;
XYZ ; AMAR ; AB123456 ;
XYZ ; RAJ ; CS78890 ;
XXX ; MANO ; MD6546474777 ;
sales_data05-JAN-16.csv
SCID NAME SCODE
SDDCCR; SOM ; MD6546474777 ;
SDDCCR; SUJAN ; SA6666464664646;
sales_data06-JAN-16.csv
SCID NAME SCODE
ABC ; RAMANA; KS566767477747 ;
sales_data08-JAN-16.csv
SCID NAME SCODE
SDDCCR; DINESH; GD6674474747 ;
XYZ ; GANE ; MD6546474777 ;
My below script is working fine apart from ganerating one more saparate file for heading
and not giving heading in all split files.
#!/bin/ksh
file_name=sales_data.csv
awk ' NR==4 {HD = $1 OFS $2 OFS $3; next; next} {FN = DIR"/sales_data_"$4".csv" file_out
if (!(Se[FN]++)) print HD > FN
print $1, $2, $3 > FN}' FS=' *; *' OFS=";" DIR="$SAL_DIR" file_out $SAL_DIR/$file_name
if [ $? -ne 0 ]
then
echo "report generation failed"
fin_anormale $0
fi
Please help me.
Thanks.