2012-05-08 3 views
3

Хорошо, поэтому я пытаюсь написать простой awk, чтобы очистить некоторые запятые некоторых файлов csv, которые у меня есть.awk, настройка FS = ",", похоже, не работает, есть ли оговорки, о которых я должен знать?

Вот несколько строк данных выборочных

PRD,,,,PEWPRV100D,,,EWPRVU457D,,,,12/31/2011 10:09:14 PM,,,,,5,,,4,, 
    PRD,,,,PEWPRV100D,,,EWPRVU250D,,,,12/31/2011 10:09:23 PM,,,,,67,,,69,, 
    PRD,,,,PEWREF100D,,,EWREFU045D,,,,12/31/2011 10:09:40 PM,,,,,7,,,5,, 
    PRD,,,,PEWPRV100D,,,EWPRVU191D,,,,12/31/2011 10:09:40 PM,,,,,6,,,5,, 

В качестве простого первого шага, я хочу, чтобы выполнить это (то, что я ultimatly хочу сделать, это более сложный, но это первое, что мне нужно сделать и я не могу даже получить это право :()

PRD,PEWPRV100D,EWPRVU457D,12/31/2011 10:09:14 PM,5,4, 
    PRD,PEWPRV100D,EWPRVU250D,12/31/2011 10:09:23 PM,67,69, 
    PRD,PEWREF100D,EWREFU045D,12/31/2011 10:09:40 PM,7,5, 
    PRD,PEWPRV100D,EWPRVU191D,12/31/2011 10:09:40 PM,6,5, 

Вот моя первая попытка на AWK сценария

#!/bin/awk 
    BEGIN{FS=",";} 
    {print $0,$4,$7,$11,$16,$19 } 
    END{print "DONE"} 

, который производит

PRD,,,,PEWPRV100D,,,EWPRVU457D,,,,12/31/2011 10:09:14 PM,,,,,5,,,4,,,,,,, 
    PRD,,,,PEWPRV100D,,,EWPRVU250D,,,,12/31/2011 10:09:23 PM,,,,,67,,,69,,,,,,, 
    PRD,,,,PEWREF100D,,,EWREFU045D,,,,12/31/2011 10:09:40 PM,,,,,7,,,5,,,,,,, 
    PRD,,,,PEWPRV100D,,,EWPRVU191D,,,,12/31/2011 10:09:40 PM,,,,,6,,,5,,,,,,, 

более выразительный сценарий, я пытался:

#!/bin/awk 
    BEGIN{FS=",";} 
    {printf("$$%s$$", $0) } 
    END{print "DONE"} 

, который производит

$$PRD,,,,PEWPRV100D,,,EWPRVU457D,,,,12/31/2011 10:09:14 PM,,,,,5,,,4,,$$ 
    $$PRD,,,,PEWPRV100D,,,EWPRVU250D,,,,12/31/2011 10:09:23 PM,,,,,67,,,69,,$$ 
    $$PRD,,,,PEWREF100D,,,EWREFU045D,,,,12/31/2011 10:09:40 PM,,,,,7,,,5,,$$ 
    $$PRD,,,,PEWPRV100D,,,EWPRVU191D,,,,12/31/2011 10:09:40 PM,,,,,6,,,5,,$$ 

показывает (я думаю), что FS = "" не устанавливает разделитель в запятую, так как вся строка рассматривается как один столбец. Я также пробовал много разных форм этой линии, ничто, похоже, не имеет значения. На страницах man версии awk утверждается, что FS - это var, который я должен установить. Я также попробовал флаг hte -F, который тоже не помог.

Есть ли что-то очевидное, что я здесь отсутствует?

+0

+1 для хорошо отформатированный вопрос, с входом и выходами образца. Удачи. – shellter

ответ

3

В awk, $0 не первый столбец - это вся строка. $1 - первая колонка, вторая колонка - $2 и т. Д. Таким образом, Вы, вероятно, хотите изменить это:

{print $0,$4,$7,$11,$16,$19 } 

к этому:

{print $1,$5,$8,$12,$17,$20 } 
+0

ahhh, я знал, что это было что-то супер простое. благодаря :) – gbtimmon

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

  • Нет связанных вопросов^_^