Переключить столбцы в файлах .csv, чтобы они все были одинаковыми

Любой приличный редактор может удобно выделять диффы. Как правило, редактор можно убедить, используя расширение .diff или установив для типа файла значение diff в противном случае.

1
13.04.2015, 12:34
1 ответ

Для любого фиксированного упорядочивания вызовов (a, b, c, d в вашем примере) вы можете использовать, например, программу awk , подобную этой, чтобы выполнить задача:

awk -v order=',a,b,c,d' '

BEGIN {
    OFS = FS = "\t"
    n = split(order,ord,",")
    for (i=1; i<=n; i++) ind[ord[i]] = i
}
FNR==1 {
    for (i=2; i<=n; i++) prm[ind[$i]] = i
}
{
    out[$1] = sprintf("%s", $1)
    for (i=2; i<=n; i++) {
        out[$1] = out[$1] sprintf("%s%s", OFS, $prm[i])
    }
    out[$1] = out[$1] sprintf("%s%s", OFS, $NF)
}
ENDFILE {
    for (i=1; i<=n; i++) print out[ord[i]]
    print out[$1] ORS
}

' a.csv b.csv c.csv

Примечание. Этот код предполагает наличие последней версии (4.x) GNU awk из-за условия ENDFILE . (Если это недоступно, решение требует корректировки.)

Примечание 2: Если вы хотите обрабатывать файлы индивидуально (один файл данных на вызов awk ), вы можете заменить ENDFILE ] от END (который также будет работать в более старых awk s).

Результаты для ваших образцов данных:

    a   b   c   d   x
a   1   2   5   3   3
b   2   2   5   5   2
c   5   5   6   6   5
d   2   3   4   4   6
x   3   1   7   6   9

    a   b   c   d   y
a   6   4   4   6   2
b   3   2   4   6   4
c   6   6   2   5   5
d   5   6   3   2   3
y   7   6   3   5   9

    a   b   c   d   z
a   3   5   3   5   2
b   3   6   2   6   7
c   5   6   4   6   1
d   7   7   4   5   2
z   5   4   3   6   7
3
29.04.2021, 00:29

Теги

Похожие вопросы