2013-12-10 2 views
0

У меня есть файл, который имеет такие строки, что:Как я могу поместить символ в строке в Bash

Вт Дек 10 14:03:45 2013 GBPCAD 158,000000

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

Вт Дек 10 14:03:45 2013; GBPCAD; 158,000000

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

+0

Где этот текст пришел? Потому что это может быть проще форматировать заранее. – fedorqui

+0

Я генерирую его путем «вырезания» из более длинной строки. – xyzt

+0

Всегда ли в той же колонке? Даже если ваша дата «Mon Dec 9 14:03:45 2013»? Или это появляется как «Mon Dec 09 14:03:45 2013»? – Andy

ответ

2

Sed может помочь.

sed -e 's/\ \([^ ]*\)\ \([^ ]*\)$/;\1;\2/g' file 

Тест

$ sed -e 's/\ \([^ ]*\)\ \([^ ]*\)$/;\1;\2/g' <<< 'Tue Dec 10 14:03:45 2013 GBPCAD 158.000000' 
Tue Dec 10 14:03:45 2013;GBPCAD;158.000000 
0

попробовать эту строку:

SED

sed -r 's/ (\w{5,}) /;\1;/' file 

kent$ echo "Tue Dec 10 14:03:45 2013 GBPCAD 158.000000"|sed -r 's/ (\w{5,}) /;\1;/'         
Tue Dec 10 14:03:45 2013;GBPCAD;158.000000 

или AWK

awk '{s=";"$(NF-1)";"$NF;NF-=2}$0=$0 s' file 

kent$ echo "Tue Dec 10 14:03:45 2013 GBPCAD 158.000000"|awk '{s=";"$(NF-1)";"$NF;NF-=2}$0=$0 s' 
Tue Dec 10 14:03:45 2013;GBPCAD;158.000000 
0

Баш:

while read -a words; do 
    printf "%s;%s;%s\n" "${words[*]:0:5}" "${words[5]}" "${words[6]}" 
done < filename 
Смежные вопросы