我有一个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列始终是第1个文件中的值,其余列需要与第2个文件的第1行重复。
答案 0 :(得分:0)
您可以使用命令粘贴(将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
循环才能添加相同数量的行,但是,我相信可能还有其他选择。
此外,您可以使用cat | cut | head
管道替换echo,以获取感兴趣的第一行中的元素,例如:
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 ","
答案 1 :(得分:0)
像这样的脚本可以完成工作:
awk -F\, 'NR==1 {a=$3"," $4;print } NR!=1 {print $0""a}' input.file
要拥有更多列,您可以通过这种方式将它们添加到awk
awk -F\, 'NR==1 {a=$3","$4","$5","$6","$7","$8","$9;print } NR!=1 {print $0""a}' input.file