shell - 使用 shell 脚本在列级别复制相同的值
问题描述
我有一个 CSV 文件,如下所示。我需要使用 unix shell 命令实现在列级别复制相同的值。数据如下图
col1, col2, col3, col4, col5, col6, col7, col8...
aaaa,12-jan-2018,ddd,10,5,6,sample,xxx,yyyy
bbbb,12-jan-2018,
bbbb,14-jan-2018,
cccc,15-jan-2018,
我需要将 CSV 文件转换为如下所示
col1, col2, col3, col4, col5, col6, col7, col8...
aaaa,12-jan-2018,ddd,10,5,6,sample,xxx,yyyy
bbbb,12-jan-2018,ddd,10,5,6,sample,xxx,yyyy
bbbb,14-jan-2018,ddd,10,5,6,sample,xxx,yyyy
cccc,15-jan-2018,ddd,10,5,6,sample,xxx,yyyy
但是,前 3 列将始终具有来自第一个文件的值,其余列需要与第二个文件的第一行重复。
解决方案
您可以使用命令粘贴(替换INPUT.csv
为您的文件名):
paste <(cat INPUT.csv | cut -f 1,2 -d "," ) <(for l in $(cat INPUT.csv); do echo "ddd,10,5,6,sample,xxx,yyyy"; done) -d ","
for
循环需要添加相同数量的行,但是,我相信可能还有其他选择。
此外,您可以用管道替换 echocat | cut | head
以获取您感兴趣的第一行中的元素,例如:
paste <(cat INPUT.csv | cut -f 1,2 -d "," ) <(for l in $(cat INPUT.csv); do cat INPUT.csv | cut -f 3-9 -d "," | head -n 1; done) -d ","
或者只是一次合并两个文件(相应地替换INPUT_1.CSV
)INPUT_2.CSV
:
paste <(cat INPUT_1.csv | cut -f 1,2 -d "," ) <(for l in $(cat INPUT_1.csv); do cat INPUT_2.csv; done) -d ","
推荐阅读
- android - Android:如何将子表与父表 Sqlite 连接起来
- python - 张量流概率:从联合分布中检索特定的随机变量
- python - 在 Pandas 中使用贷方借记计算余额
- r - R 包“rEDM”:用于收敛交叉映射的 ccm_means 函数?
- python - 使用 .expanding() Python 计算投资组合回撤
- mysql - 如何使用添加条件到一列
- javascript - 倒计时时如何停止jquery事件
- javascript - Reactjs 和脚本
- mplab - 从数组中的实时数据中检测峰值
- python - VS Code - python 无法打开扩展文件没有这样的文件或目录