解析Shell脚本中的文本文件,以逗号和等号分隔

时间:2014-08-26 06:06:46

标签: shell parsing comma

我想编写一个shell脚本,它将解析输入文本文件的每一行,并以键值格式输出。

示例输入行 - >

NAME=Bhavin,RollNo=123,Class=10,Rank=1 ( Line 1 )
EMPLOYEE=Prashant,EID=233,Role=Consultant ( Line 2 )
COMPANY=xyz,location=india ( Line 3 )

预期的输出是:

Name = Bhavin
RollNo = 123
Class = 10
Rank = 1
**********
EMPLOYEE=Prashant
EID=233
Role=Consultant
**********
COMPANY=xyz
location=india
**********

谢谢, Bhavin

3 个答案:

答案 0 :(得分:1)

使用awk你可以这样做:

awk -F '[ ,]+' '{for (i=1; i<=NF; i++) if (index($i, "=")) {
       split($i, a, "="); print a[1], "=", a[2]} print "**********"}' file
NAME = Bhavin
RollNo = 123
Class = 10
Rank = 1
**********
EMPLOYEE = Prashant
EID = 233
Role = Consultant
**********
COMPANY = xyz
location = india
**********

答案 1 :(得分:0)

这是一个sed解决方案。如果输入文件名为input,则运行:

$ sed 's/=/ = /g; s/,/\n/g; s/$/\n**********/' input
NAME = Bhavin
RollNo = 123
Class = 10
Rank = 1
**********
EMPLOYEE = Prashant
EID = 233
Role = Consultant
**********
COMPANY = xyz
location = india
**********

如何运作

sed是一名编辑。这里使用的基本命令是替换,其格式为s/old/new/。我们使用三个替代命令:

  • s/=/ = /g

    这会在所有等号周围留出空格。命令末尾的g告诉sed在行上的每个等号上执行此替换,而不仅仅是第一行。

  • s/,/\n/g

    这会在逗号出现的地方用逗号替换逗号。

  • s/$/\n**********/

    在每行输入之后,这会添加一行星。

答案 2 :(得分:0)

感谢您的回复,这对我也有用: -

HOME_DIR="/home/bhatiab/ashok/src/ExcessInterfaces";
MAINENTITY_FILENAME="MainEntities.log";

while read line
do
    ENTITY_NAME=`echo $line | cut -d "," -f1`
    echo "ENTITY_NAME = "$ENTITY_NAME""
    arr=$(echo $line | tr "," "\n")
    for x in $arr
    do
        echo "$x"
    done
    echo "********************";

done < ${HOME_DIR}/${MAINENTITY_FILENAME}