2014-02-07 3 views
0

У меня есть файл, который выглядит какДобавление одной даты к первой колонке файла

1234-00AA12 .02 
5678-11BB34 .03 

В Баш скрипт у меня есть выражение, как

день = $ (...)

, который связывает дату в формате YYYY/MM/DD (если это имеет значение), скажем, 2014/01/21 для специфики.

Я хочу, чтобы произвести следующее:

2014/01/21,1,1,1234,00AA12,.02 
2014/01/21,1,1,5678,11BB34,.03 

(Первый столбец дня, вторые и третьи столбцы являются фиксированными, как «1»).

После немного прибегая к помощи я попытался:

cat file|awk -F "-" '{split($2,array," "); printf "%s,%s,%s,%s,%s,%s\n",$day,"1","1",$1,array[1],array[2]}'> output.csv 

но $ день не работает с AWK.

Любая помощь будет оценена по достоинству.

+1

awk не является оболочкой. 'day' - это переменная оболочки. См. Q24 в часто задаваемом файле comp.unix.shell. –

+1

@ EdMorton 'awk не является оболочкой'. Напоминает одно из: 'GNU не Unix'. – devnull

ответ

0

awk не понимает переменные оболочки. Вам необходимо пройти те к нему:

awk -vdd="$day" -F "-" '{split($2,array," "); printf "%s,%s,%s,%s,%s,%s\n",dd,"1","1",$1,array[1],array[2]}' 

Кроме того, вместо того, чтобы сказать:

cat file | awk ... 

избежать бесполезного использования кошки:

awk file 
+0

Именно то, что я ищу. Спасибо devnull – TKD

1

Попробуйте AWK:

awk -v d=$(date '+%Y/%m/%d') '{print d,1,1,$1,$2}' OFS=, file 
2014/02/07,1,1,1234-00AA12,.02 
2014/02/07,1,1,5678-11BB34,.03 
1
$ awk -v day="$day" 'BEGIN{FS="[ -]";OFS=","} {print day,1,1,$1,$2,$3}' file 
2014/01/21,1,1,1234,00AA12,.02 
2014/01/21,1,1,5678,11BB34,.03 
0

С Баш

day="2014/01/21" 
(
    IFS=, 
    while IFS=" -" read -ra fields; do 
     new=("$day" 1 1 "${fields[@]}") 
     echo "${new[*]}" 
    done < file 
) 
2014/01/21,1,1,1234,00AA12,.02 
2014/01/21,1,1,5678,11BB34,.03 

я бегу время цикла в субоболочке просто сохранить изменения в IFS локализованы.

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