CSV -删除/添加列或行-合并CSV文件

zpf6vheq  于 2023-03-05  发布在  其他
关注(0)|答案(1)|浏览(219)

1.如何合并2个CSV文件?如果我这样尝试,它不会添加任何列,但2文件作为一个新行?列不知何故从来没有添加在末尾(在最后一列之后)。但总是在第2行或最后一行末尾以下。product2.csv只有标题,没有表格内容。这可能是因为?
1.当我没有CSV文件但仍然想添加一个列时,我可以用awk或sed来完成吗?
1.如何删除第4列?
1.如何删除第4行?
我试过了

paste -d, product1.csv product2.csv > result.csv

cat product1.csv product2.csv > result.csv

product1.csv

Id;ReferenceNumber;EAN;Manu;Price_B2BR;Price_B2BD;Price_B2BDP;Price_B2BDA;Price_B2CEV;Price_B2CIV;VATRate;VATCountry;Currency;Stock;Delivery;StockNextDeliveryAccessVolume;WarrantyCode;EOL;Promotion;NonReturnable;RemainingStock;ImagePrimary;ImageAdditional;ProductLink;GrossWeight;NetWeight;RelatedProducts;AccessoryProducts;AA
3910112;BP9641;1,83E+10;APC;191;191;0;0;0;0;19;DE;EUR;8;;0;GH24;0;0;0;0;;;;0,34;;;;502,8
4640420;A-LTO7XSA;6,92E+11;Tandberg Data;1344,9;1344,9;0;0;3633;4214,28;19;DE;EUR;1;04.11.2023;1;GH36;0;0;0;0;;;;5,75;;;;438
5180134;403358811;2,80E+09;Intel;252,9;252,9;0;0;0;0;19;DE;EUR;0;;0;G24;1;0;0;0;;;;0,01;;;;16,44
1480155;100380;;Microsoft;11;11;0;0;14,32;16,61;19;DE;EUR;100;;0;;0;0;0;0;;;;0;;;;34,75

product2.csv

Can be Sold?;Can be Purchased?;Product Type;Category;Unit of Measure;Purchase Unit of Measure;Customer Taxes;Vendor Taxes;Invoicing Policy;Description for Customers;Quantity On Hand;image path/url

我的结果总是这样的:
result.csv

Id;ReferenceNumber;EAN;Manu;Price_B2BR;Price_B2BD;Price_B2BDP;Price_B2BDA;Price_B2CEV;Price_B2CIV;VATRate;VATCountry;Currency;Stock;Delivery;StockNextDeliveryAccessVolume;WarrantyCode;EOL;Promotion;NonReturnable;RemainingStock;ImagePrimary;ImageAdditional;ProductLink;GrossWeight;NetWeight;RelatedProducts;AccessoryProducts;AA
3910112;BP9641;1,83E+10;APC;191;191;0;0;0;0;19;DE;EUR;8;;0;GH24;0;0;0;0;;;;0,34;;;;502,8
4640420;A-LTO7XSA;6,92E+11;Tandberg Data;1344,9;1344,9;0;0;3633;4214,28;19;DE;EUR;1;04.11.2023;1;GH36;0;0;0;0;;;;5,75;;;;438
5180134;403358811;2,80E+09;Intel;252,9;252,9;0;0;0;0;19;DE;EUR;0;;0;G24;1;0;0;0;;;;0,01;;;;16,44
1480155;100380;;Microsoft;11;11;0;0;14,32;16,61;19;DE;EUR;100;;0;;0;0;0;0;;;;0;;;;34,75
Can be Sold?;Can be Purchased?;Product Type;Category;Unit of Measure;Purchase Unit of Measure;Customer Taxes;Vendor Taxes;Invoicing Policy;Description for Customers;Quantity On Hand;image path/url

但它应该看起来像这样:

Id;ReferenceNumber;EAN;Manu;Price_B2BR;Price_B2BD;Price_B2BDP;Price_B2BDA;Price_B2CEV;Price_B2CIV;VATRate;VATCountry;Currency;Stock;Delivery;StockNextDeliveryAccessVolume;WarrantyCode;EOL;Promotion;NonReturnable;RemainingStock;ImagePrimary;ImageAdditional;ProductLink;GrossWeight;NetWeight;RelatedProducts;AccessoryProducts;AA;Can be Sold?;Can be Purchased?;Product Type;Category;Unit of Measure;Purchase Unit of Measure;Customer Taxes;Vendor Taxes;Invoicing Policy;Description for Customers;Quantity On Hand;image path/url
3910112;BP9641;1,83E+10;APC;191;191;0;0;0;0;19;DE;EUR;8;;0;GH24;0;0;0;0;;;;0,34;;;;502,8;;;;;;;;;;;;
4640420;A-LTO7XSA;6,92E+11;Tandberg Data;1344,9;1344,9;0;0;3633;4214,28;19;DE;EUR;1;04.11.2023;1;GH36;0;0;0;0;;;;5,75;;;;438;;;;;;;;;;;;
5180134;403358811;2,80E+09;Intel;252,9;252,9;0;0;0;0;19;DE;EUR;0;;0;G24;1;0;0;0;;;;0,01;;;;16,44;;;;;;;;;;;;
1480155;100380;;Microsoft;11;11;0;0;14,32;16,61;19;DE;EUR;100;;0;;0;0;0;0;;;;0;;;;34,75;;;;;;;;;;;;
fcy6dtqo

fcy6dtqo1#

我将按照以下方式利用GNU AWK完成此任务,为了简洁起见,我将使用其他文件,让file1.csv内容

id;name;price
1;Able;300
2;Baker;200
3;Charlie;100

并且file2.csv含量是

category;unit;taxes

那么

awk 'BEGIN{FS=OFS=";"}NR==1{append=$0;next}FNR==1{$0=$0 ";" append;fieldsnum=NF}{NF=fieldsnum;print}' file2.csv file1.csv

给出输出

id;name;price;category;unit;taxes
1;Able;300;;;
2;Baker;200;;;
3;Charlie;100;;;

说明:我告诉GNU AWK分号是两个字段的分隔符(FS)和输出字段分隔符(OFS)当全局处理第一行时(第一个文件的第一行,注意我首先RAM file2.csv)我只存储整行变量append中的($0),并指示GNU AWK转到next行,因此不执行其他操作,处理文件第一行时(除第1行外)我将整行与;append连接,将其后的字段数保存在变量fieldsnum中,对于除第一行以外的每一行,我设置NF为计算字段数,print为计算字段数。如果行的字段数较少,则在末尾添加新字段,并且字段为空。如果您想了解更多有关FNR或NF的NR的信息,请读取8 Powerful Awk Built-in Variables – FS, OFS, RS, ORS, NR, NF, FILENAME, FNR

  • (在GNU Awk 5.0.1中测试)*

相关问题