我想编写一个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
答案 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}