如何解决如何使用Shell脚本连接2个csv文件?
| 我正在尝试制作一个shell脚本,该脚本将通过以下方式组合两个csv文件: 我有两个csv文件,分别是f1.csv和f2.csv。 f1.csv的格式为:startId,endId,roomNum
f2.csv的格式如下:
startId,teacherId
我想将这两种格式合并为一个csv文件:
startId,roomNum,teacherId.
在Linux下运行的Shell脚本完成此操作的最佳方法是什么?
解决方法
尝试:
join -t,-1 1 -2 1 -o 1.2 1.3 1.4 2.4 <(awk -F,\'{print $1\":\"$2\",\"$0}\' f1.csv | sort) <(awk -F,\"$0}\' f2.csv | sort)
怎么运行的:
1)我首先通过将两个文件的startId和endId合并到startId:endId中来创建一个复合键列。
awk -F,\"$0}\' f1.csv
awk -F,\"$0}\' f2.csv
2)我对两个输出进行排序:
awk -F,\"$0}\' f1.csv | sort
awk -F,\"$0}\' f2.csv | sort
3)然后,我使用join
命令加入我的复合键(在第一列中)并仅输出所需的列。
, 用join -t \';\'
合并对应的行。 -t选项的参数取决于CSV字段分隔符(通常为分号)。请参见加入手册的其余部分。如果以后需要精简重复的列,请使用cut
。
, awk -F\",\" \'{print $1\",\"$2\",\"$3\",9999\"}\' f1.csv > newFile;
awk -F\",9999,\"$3}\' f2.csv >> newFile
让我解释一下这里发生了什么-F \“,\”指定一个逗号作为字段分隔符。
对于缺少的列,我将其替换为文本9999,然后可以替换为任意内容。 firs命令将stdout重定向到名为\'newFile \'的文件,第二个命令将stdout附加到同一文件。
希望对您有所帮助,您的问题不是要清除每个文件中缺少的字段要做什么。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。