2015-08-19 4 views
0

У меня есть CSV-файл, который выглядит следующим образом:Извлечение данных из определенного числа столбца в CSV файле

arruba,jamaica, bermuda, bahama, keylargo, montigo, kokomo 
80,70,90,85,86,89,83 
77,75,88,87,83,85,77 
76,77,83,86,84,86,84 

Я хочу иметь сценарий оболочки настроить так, что я могу извлечь из данных, так что я может классифицировать данные по столбцам.

Я знаю, что строка кода:

IFS="," read -ra arr <"vis.degrib" 
for ((i=0 ; i<${#arr[@]} ; i++));do 
    ifname=`printf "%s\n" "${arr[i]}"` 
    echo "$ifname" 
done 

напечатает отдельных компонентов столбцов для первой строки. Как сделать это снова для последующих строк?

Спасибо за ваше время.

+0

Каков ваш ожидаемый выход? – anubhava

+0

Я не думаю, что ваш скрипт работает так, как вы планировали. – karakfa

ответ

1

Я экстраполяция из ОПА

awk -F, 'NR==1{for(i=1;i<=NF;i++) {gsub(/^ +/,"",$i);print $i}}' vis.degrib 

напечатает

arruba 
jamaica 
bermuda 
bahama 
keylargo 
montigo 
kokomo 

к сведению, что урежут пространства с начала каждого поля. Если вы удалите условие NR==1, то это будет сделано для всех строк. Это ваш запрос? Пожалуйста, прокомментируйте ...

Возможно, вы хотите преобразовать формат столбцов в строковый формат (транспонировать)? Есть много способов, это AWK скрипт сделает

awk -F, -v OFS=, '{sep=(NR==1)?"":OFS} {for(i=1;i<=NF;i++) a[i]=a[i] sep $i} END{for(i=1;i<=NF;i++) print a[i]}' vis.degrib 

напечатает

arruba,80,77,76 
jamaica,70,75,77 
bermuda,90,88,83 
bahama,85,87,86 
keylargo,86,83,84 
montigo,89,85,86 
kokomo,83,77,84 

вы можете снова урезать пространство от начала этикетки, как показано выше.

Другой подход без awk.

tr ',' '\n' <vis.degrib | pr -4ts, 

будет генерировать тот же

arruba,80,77,76 
jamaica,70,75,77 
    bermuda,90,88,83 
    bahama,85,87,86 
    keylargo,86,83,84 
    montigo,89,85,86 
    kokomo,83,77,84 

4 это количество строк в исходном файле.

+0

1+ для последней команды 'pr' – anubhava

Смежные вопросы