2015-08-31 3 views
1

У меня есть набор табличных данных, которые для удобства чтения были скорректированы с одним, двумя, тремя или четырьмя языковыми пространствами. Теперь я хочу экспортировать его в файл CSV. , поэтому, если я прав, мне нужно будет преобразовать все одно или несколько вкладок/сек в одну запятую. Я пробовал трюк вроде ниже, но безрезультатно!Замените несколько областей вкладок на, табличные текстовые данные в CSV

awk 'NR>1{gsub("\t\t\t\t",",")}1' <test.data> awk.xls 
awk 'NR>1{gsub("\t\t\t",",")}1' <awk.xls> awk.xls 
awk 'NR>1{gsub("\t\t",",")}1'<awk.xls> awk.xls 
awk 'NR>1{gsub("\t",",")}1'<awk.xls> awk.xls 

как я могу это сделать?

glimse данных

C(SiH3)2  triplet  DFT   TO   2.013503 -620.379515709604 3-1/C-SiH3-2/C-SiH3-2-t.out 
CF2    singlet  CC   TO   0.000000 -237.419131945340 3-1/CF2/CF2-CC-s.out 
CF2    singlet  DFT   TO   -0.000000 -237.686609290184 3-1/CF2/CF2-s.out 
CF2    triplet  DFT   TO   2.005408 -237.601091999318 3-1/CF2/CF2-t.out 

ответ

2

Вы близки.

awk 'NR > 1 {gsub(/\t+/, ",")} 1' awk.xls > temp_awk.xls 
mv temp_awk.xls awk.xls 

должно работать.

/\t+/ будет соответствовать одной или нескольким вкладкам.

+0

как могу ли я удалить остальную часть пробелов? –

+0

Это дает мне пустой файл, когда оба входа и выхода являются одним и тем же файлом? –

+0

Да, вы не можете использовать тот же файл для ввода и вывода. Используйте 'awk 'NR> 1 {gsub (/ [[: blank:]] + /,", ")} 1' awk.xls> awk_temp.xls && mv awk_temp.xls awk.xls' – anubhava

1

С awk вы можете делать почти все, кроме правильного инструмента для обработки это tr

sed 1d | tr -s '\t' ',' 

-s вариант для сжимания-повторами

2

Все, что вам нужно:

awk -F'\t+' -v OFS=',' '{$1=$1}1' file 
Смежные вопросы