Как я могу «дополнить» CSV-файл в bash? - PullRequest
0 голосов
/ 20 марта 2012

Например, предположим, что я хочу файл CSV с 5 столбцами.Как я могу конвертировать

a,b,c,d
d,e,f

в

a,b,c,d,
d,e,f,,

Ответы [ 4 ]

6 голосов
/ 20 марта 2012

Легко в Awk:

awk -F, -vOFS=, '{$5=$5}1'

Не слишком сложно в Bash:

IFS=,
while read -a F; do
    for ((i=0; i<5; i++)); do
        F[i]=${F[i]}
    done
    echo "${F[*]}"
done
4 голосов
/ 20 марта 2012

Пример с awk:

$ awk -F, '{printf("%s,%s,%s,%s,%s\n",$1,$2,$3,$4,$5)}' example.txt
a,b,c,d,
d,e,f,,

или

$ awk -F, -v OFS=, '{print $1,$2,$3,$4,$5}' example.txt
2 голосов
/ 20 марта 2012

Я нашел решение с GNU sed:

sed -r 's/^([^,]*)(,|)([^,]*)(,|)([^,]*)(,|)([^,]*)(,|)$/\1,\3,\5,\7,/'

#             |          |          |          |          ^  ^  ^  ^
#             |          |          |          |          |  |  |  |
#             |__________|__________|__________|__________|  |  |  |
#                        |__________|__________|_____________|  |  |
#                                   |__________|________________|  |
#                                              |___________________|

Доказательство:

echo -e "a,b,c,d\nd,e,f\nx" | sed -r 's/^([^,]*)(,|)([^,]*)(,|)([^,]*)(,|)([^,]*)(,|)$/\1,\3,\5,\7,/'
a,b,c,d,
d,e,f,,
x,,,,
0 голосов
/ 21 марта 2012

Другой подход, который мне очень нравится, таков:

gawk '{print $0 ",,,,,"}' a | cut -d \, -f 1-5

Я думаю, что он намного проще и понятнее

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...