我在同一个目录中有两个列数相同的.csv文件,我想将它们合并成一个文件,但只保留第一个文件的一个标题。文件名总是不同的,只有前缀保持不变:
第一个
输出文件应如下所示:
file_load.csv
Order_number,Quantity,Price
100,10,25.3
101,15,30.2
102,20,12.33
103,3,3.4
这已经在shell脚本文件中了,因为现在我只需要一个文件,但是现在我必须合并两个文件:
awk '(NR-1)%2{$1=$1}1' RS=\" ORS=\" orderline_*.csv >> file_to_load.csv
我试着把它改成
awk 'FNR == 1 && NR != 1 {next} (NR-1)%2{$1=$1}1' RS=\" ORS=\" orderline_*.csv >> file_to_load.csv
但是在输出中我得到了两次头。
你能帮我一下吗?这个命令应该是什么样子的?我需要保留它以前的定义。
谢谢你,谢谢你
3条答案
按热度按时间83qze16e1#
你要找的
NR是所看到的所有记录的计数,以及
FNR是当前文件的记录号。
0lvr5msh2#
有时解决办法是把任务分成简单的步骤
1.获取第一行,即表头并存储为变量
https://stackoverflow.com/a/2439587/3957754
2.获取文件中除第一行以外的所有行
How to tail all lines except first row
对两个文件重复此操作
3.将标题和n个正文连接起来
csv_merger.sh
测试结果
您可以扩展此脚本以处理更多文件
rqdpfwrv3#
使用方便的csvkit package中的
csvstack
是合并具有相同列的CSV文件的一种方法: