如何在Bash中将一个角色放到一行中

时间:2013-12-10 15:29:02

标签: bash

我的文件有这样的行:

  

Tue Dec 10 14:03:45 2013 GBPCAD 158.000000

我想添加';'到特定列并将其转换为

  

2013年12月10日星期二14:03:45; GBPCAD; 158.000000

我该怎么做?

4 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

awk '{$(NF-2)=$(NF-2)";"$(NF-1)";"$NF;NF=NF-2};{print}'

答案 2 :(得分: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

答案 3 :(得分:0)

击:

while read -a words; do
    printf "%s;%s;%s\n" "${words[*]:0:5}" "${words[5]}" "${words[6]}"
done < filename