按列连接两行标题

时间:2018-02-27 18:02:16

标签: csv unix awk command-line

我有一个CSV文件,其标题由两行组成:

A, A, B, B, B
a, b, c, d, e
1, 2, 3, 4, 5
2, 3, 4, 5, 6

我想将标题连接到此表单:

A_a, A_b, B_c, B_d, B_e
1,   2,   3,   4,   5
2,   3,   4,   5,   6

如何在命令行中使用bash,sed等实现?

2 个答案:

答案 0 :(得分:4)

Awk 解决方案:

awk 'BEGIN{ FS = OFS = ", " }
     NR == 1{ split($0, a, ", "); next }
     NR == 2{ for(i=1; i <= NF; i++) $i = a[i]"_"$i }1' file

输出:

A_a, A_b, B_c, B_d, B_e
1, 2, 3, 4, 5
2, 3, 4, 5, 6

答案 1 :(得分:1)

bash解决方案:

#!/bin/bash

argfile=$1
line1=($(sed -n 1s/,//gp $argfile))
line2=($(sed -n 2p $argfile))
line12=()

for ((i=0; i<${#line1[*]}; i++))
do
    line12+=${line1[$i]}"_"${line2[$i]}" "
done
echo $line12
sed -n '3,$p' $argfile

输出:

A_a, A_b, B_c, B_d, B_e
1, 2, 3, 4, 5
2, 3, 4, 5, 6