Сравните два CSV-файла, содержащие данные -с плавающей точкой, и распечатайте их разностную статистику

Используйте sed, швейцарский армейский нож для обработки текста:

sed 's/\.xml.*//' File
-1
30.04.2021, 01:15
2 ответа
$ paste a.csv b.csv | awk -F '\t' 'NR > 1 { ++cmp[$1>$2 ? 1 : $1==$2 ? 0 : -1] } END { printf "greater\t= %d\nsmaller\t= %d\nequal\t= %d\n", cmp[1],cmp[-1],cmp[0] }'
greater = 2
smaller = 2
equal   = 1

Это создает ввод из двух -столбцов для короткой awkпрограммы с использованием paste. Содержимое a.csvбудет в первом поле, а содержимое b.csvбудет во втором поле, а между ними будет символ табуляции в -.

Строка заголовка отбрасывается, и первый блок кода увеличивает один из трех счетчиков в массиве cmp. Значение cmp[1]увеличивается, если первое поле(a.csv)больше второго поля (b.csv). Значение cmp[0]увеличивается, если два поля равны. Значение cmp[-1]увеличивается, если второе поле больше первого.

В конце в блоке ENDпечатаются результаты.

То же самое в Perl, используя его оператор космического корабля<=>:

$ paste a.csv b.csv | perl -a -F'\t' -e '$. > 1 && ++$cmp{$F[0] <=> $F[1]}; END { printf "greater\t= %d\nsmaller\t= %d\nequal\t= %d\n", $cmp{1},$cmp{-1},$cmp{0} }'
greater = 2
smaller = 2
equal   = 1

$.в Perl более или менее совпадает с NRв awk, поэтому $. > 1пропускает строку заголовка во входных данных. Если вы использовали -MEnglish, вы можете изменить $.на $NR.

2
28.07.2021, 11:36

Использование любого awk в любой оболочке на каждом компьютере Unix:

$ cat tst.awk
FNR==1 { next }
NR==FNR {
    v[FNR] = $1
    next
}
{
    if      ( v[FNR] > $1 ) { gt++ }
    else if ( v[FNR] < $1 ) { lt++ }
    else                    { eq++ }
}
END {
    tot = gt + lt + eq
    printf "%s is greater than %s in %d/%d cases.\n", ARGV[1], ARGV[2], gt, tot
    printf "%s is smaller than %s in %d/%d cases.\n", ARGV[1], ARGV[2], lt, tot
    printf "%s is equal to %s in %d/%d cases.\n",     ARGV[1], ARGV[2], eq, tot
}

$ awk -f tst.awk a.csv b.csv
a.csv is greater than b.csv in 2/5 cases.
a.csv is smaller than b.csv in 2/5 cases.
a.csv is equal to b.csv in 1/5 cases.
1
28.07.2021, 11:36

Теги

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