首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将两个.csv文件合并为一个,只保留一个头- in bash。

将两个.csv文件合并为一个,只保留一个头- in bash。
EN

Stack Overflow用户
提问于 2022-11-08 13:55:40
回答 3查看 45关注 0票数 0

我在同一个目录中有两个.csv文件,列数相同,我想将它们合并成一个文件,但只保留第一个文件的一个头。文件名总是不同的,只有前缀保持不变:

代码语言:javascript
运行
复制
orderline_123456.csv

Order_number,Quantity,Price
100,10,25.3
101,15,30.2
代码语言:javascript
运行
复制
orderline_896524.csv

Order_number,Quantity,Price
102,20,12.33
103,3,3.4

输出文件应该类似于:

代码语言:javascript
运行
复制
file_load.csv

Order_number,Quantity,Price
100,10,25.3
101,15,30.2
102,20,12.33
103,3,3.4

这已经在shell脚本文件中了,因为从现在开始,我只需要接受一个文件,但是现在我必须合并两个文件:

代码语言:javascript
运行
复制
awk '(NR-1)%2{$1=$1}1' RS=\" ORS=\" orderline_*.csv >> file_to_load.csv

我试着把它改成

代码语言:javascript
运行
复制
awk 'FNR == 1 && NR != 1 {next} (NR-1)%2{$1=$1}1' RS=\" ORS=\" orderline_*.csv >> file_to_load.csv

但是我在输出中得到了两次头。

你能帮帮我吗?这个命令到底应该是什么样子?我需要保留它之前的定义。

谢谢!

EN

回答 3

Stack Overflow用户

发布于 2022-11-08 14:05:57

你在找

代码语言:javascript
运行
复制
awk 'NR == 1 || FNR > 1' file ...

NR是所有记录的计数,以及

FNR是当前文件的记录号。

票数 3
EN

Stack Overflow用户

发布于 2022-11-08 14:55:07

有时解决方案是用简单的步骤来划分任务。

1.获取第一行,即头,并将其存储为变量。

https://stackoverflow.com/a/2439587/3957754

代码语言:javascript
运行
复制
header=$(head -n 1 file1.csv)

2.获取文件的所有行,但第一行除外。

如何跟踪除第一行以外的所有行

代码语言:javascript
运行
复制
body=$(tail -n+2 file1.csv)

对两个文件重复此操作

3.标题和n个机构

csv_merger.sh

代码语言:javascript
运行
复制
header=$(head -n 1 file1.csv)
body1=$(tail -n+2 file1.csv)
body2=$(tail -n+2 file2.csv)
echo "$header" > merged.csv
echo "$body1" >> merged.csv
echo "$body2" >> merged.csv

结果

您可以扩展此脚本以处理更多文件。

票数 0
EN

Stack Overflow用户

发布于 2022-11-08 15:18:52

使用方便的csvstack中的csvkit软件包是将CSV文件与相同列合并的一种方法:

代码语言:javascript
运行
复制
$ csvstack orderline_123456.csv orderline_896524.csv > file_load.csv
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74361927

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档