0

我有 2 个文件,一个只有一行常量和 3 个空字段,需要插入变量以创建一个完整的唯一文件的文件。

例子:

常量.csv:

1,,3,4,,6,7,,9,10

变量.csv:

a,b,c

d,e,f

g,h,我

结果.csv:

1,a,3,4,b,6,7,c,9,10

1,d,3,4,e,6,7,f,9,10

1,g,3,4,h,6,7,i,9,10

4

3 回答 3

4

只需使用 bash:

template=$(< Constants.csv)
template=${template//,,/,%s,}
while IFS=, read -ra values; do 
    printf "$template\n" "${values[@]}"
done < Variables.csv > Outcome.csv
cat Outcome.csv
1,a,3,4,b,6,7,c,9,10
1,d,3,4,e,6,7,f,9,10
1,g,3,4,h,6,7,i,9,10
于 2013-07-08T19:19:51.930 回答
1

你可以像这样创建一个程序:

#!/usr/bin/awk -f

BEGIN {
    OFS = FS = ","
}

NF == 10 {
    constants = $0
}

NF == 3 {
    a = $1
    b = $2
    c = $3
    $0 = constants
    $2 = a
    $5 = b
    $8 = c
    print
}

你这样称呼:

 awk -f ./outcome.awk constants.csv variables.csv > outcome.csv

这假设格式与您上面的完全一样。更动态的方法是:

#!/usr/bin/awk -f

BEGIN {
    OFS = FS = ","
}

constants && NF {
    split($0, vars)
    last_used_var = 0
    $0 = constants
    for (f = 1; f < NF; ++f) {
        if ($f == "") {
            $f = vars[++last_used_var]
        }
    }
    print
}

constants == "" {
    constants = $0
}
于 2013-07-08T18:51:54.093 回答
0

您可以相当快地编写一个 perl 脚本,该脚本在逗号处拆分并在找到空格的位置插入。您还可以为常量保留一个数组索引,并使用模运算来跟踪要使用的变量。

于 2013-07-08T18:34:01.107 回答