在Shell脚本中解析文本文件,该脚本由逗号和等号分隔
我想写一个shell脚本,它将解析输入文本文件的每一行,并以键值的格式输出 示例输入行-> 预期产出为:在Shell脚本中解析文本文件,该脚本由逗号和等号分隔,shell,parsing,comma,Shell,Parsing,Comma,我想写一个shell脚本,它将解析输入文本文件的每一行,并以键值的格式输出 示例输入行-> 预期产出为: Name = Bhavin RollNo = 123 Class = 10 Rank = 1 ********** EMPLOYEE=Prashant EID=233 Role=Consultant ********** COMPANY=xyz location=india ********** 谢谢, Bhavin使用awk可以执行以下操作: awk -F '[ ,]+' '{for (
Name = Bhavin
RollNo = 123
Class = 10
Rank = 1
**********
EMPLOYEE=Prashant
EID=233
Role=Consultant
**********
COMPANY=xyz
location=india
**********
谢谢,
Bhavin使用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
**********
awk-F'[,]+'{for(i=1;i这里有一个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
是一个编辑器。这里使用的基本命令是substitute,其形式为s/old/new/
。我们使用三个substitute命令:
s/=/=/g
这将在所有等号周围放置空格。命令末尾的g
告诉sed
对行上的每个等号执行此替换,而不仅仅是第一个等号
s/,/\n/g
这将在逗号出现的地方用换行符替换逗号
s/$/\n*********/
在每行输入之后,会添加一行星星
谢谢你的回复,这对我也很有用:-
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}
HOME_DIR=“/HOME/bhatiab/ashok/src/ExcessInterfaces”;
maintentity_FILENAME=“maintenties.log”;
读行时
做
实体名称=`echo$line | cut-d“,”-f1`
echo“ENTITY\u NAME=“$ENTITY\u NAME”
arr=$(echo$行| tr“,“\n”)
以$arr计算的x
做
回音“$x”
完成
回声“*******************”;
完成<${HOME\u DIR}/${maintentity\u FILENAME}
这在一定程度上适用于我-当IFS=,read-ra arr;do echo${arr[0]};echo${arr[1]};done时,我如何知道每行中键值对的数量?它可能会有所不同
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}