У меня есть несколько CSV-файлов с несколькими столбцами, и я хочу получить максимальную длину, минимальную длину отдельных столбцов и diff (max -min) для каждого столбец в том же файле CSV. Пример:Поиск минимальной и максимальной длины столбцов в CSV-файле с использованием сценария оболочки
файла:
abc 1234 4
bcd 23644 534
c 3232 6
Ожидаемые результаты:
abc 1234 4
bcd 23644 534
c 3232 6
Max Length 3 5 3
Min Length 1 4 1
Diff 2 1 2
Следующий сценарий для вычисления длины столбца MAX производит ожидаемый результат:
awk -F, '
{ for (i=1;i<=NF;i++)l[i]=((x=length($i))>l[i]?x:l[i])}
END {for(i=1;i<=NF;i++) print "Column"i":",l[i]} '
но есть проблема с MIN Длина сценария:
awk -F"," 'BEGIN {
for (i=1;i<=NF;i++) {
cur = length($i)
if ((min == 0) || (cur < min)) {
minlength = i
min = cur
}
} ;
for (i=1;i<=NF;i++) print $minlength}'
Любая помощь была бы принята с благодарностью.
Во втором сценарии, использование НАЧАТЬ показывает, что вам нужно прочитать на что BEGIN делает. Кроме того, вы говорите о файлах CSV, а awk-скрипты используют запятые в качестве разделителей, но ваши примеры не содержат в них запятых. Поскольку «CSV» в любом случае является весьма неоднозначным обозначением, это может помочь, если вы уточните, что вы имеете в виду. В частности, какое-либо из полей имеет встроенные разделители полей? Если значение в поле в файлах CSV выглядит как '' abc "' (то есть с внешними кавычками), следует ли считать, что оно имеет длину 3 или 5? Как насчет длины '' "" "'? – peak