Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Shell脚本中解析文本文件,该脚本由逗号和等号分隔_Shell_Parsing_Comma - Fatal编程技术网

在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 (

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

示例输入行->

预期产出为:

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}