用逗号和等号分隔的Shell脚本解析文本文件
Posted
技术标签:
【中文标题】用逗号和等号分隔的Shell脚本解析文本文件【英文标题】:Parsing a text file in Shell Script separated by comma and equalsTo sign 【发布时间】:2014-08-26 06:06:45 【问题描述】:我想编写一个 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
**********
谢谢, 巴文
【问题讨论】:
这在一定程度上对我有用 - 而 IFS=, 阅读 -ra arr;回声 $arr[0];回声 $arr[1];完成 但是,我如何知道每行中键值对的数量?它可以变化 【参考方案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
**********
【讨论】:
【参考方案2】:这是一个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**********/
在每行输入之后,添加一行星号。
【讨论】:
【参考方案3】:感谢您的回复,这对我也有用:-
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
【讨论】:
以上是关于用逗号和等号分隔的Shell脚本解析文本文件的主要内容,如果未能解决你的问题,请参考以下文章