Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.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
Linux Awk Sed查找结果并将结果分配给多个变量_Linux_Bash_Awk_Sed - Fatal编程技术网

Linux Awk Sed查找结果并将结果分配给多个变量

Linux Awk Sed查找结果并将结果分配给多个变量,linux,bash,awk,sed,Linux,Bash,Awk,Sed,我必须读一个大文件,找到FamlyType的出现点。一旦我找到了,我需要分配faimlytype部分下的内容,在该部分下有许多数据点需要分配给变量,以便我进行进一步的测试 FamilyType FamilyKind String G userName: String: MATT_HANS serviceList: String: H2O hostList: S

我必须读一个大文件,找到FamlyType的出现点。一旦我找到了,我需要分配faimlytype部分下的内容,在该部分下有许多数据点需要分配给变量,以便我进行进一步的测试

FamilyType

FamilyKind              String      G
userName:               String:     MATT_HANS
serviceList:           String:         H2O
hostList:               String:     159.220.108.80
protocol:               String:         UDP
portNumber:             Numeric:        8149
port:                  String:      TCPIP


FamilyType

FamilyKind              String      f
userName:               String:     Geroge_lucas
serviceList:           String:      WWW
hostList:               String:     159.220.108.70
protocol:               String:     TCP
portNumber:             Numeric:    8166
port:                  String:      TCPIP
因此,我需要在脚本中编写一个例程来查找Familtype,然后将username&servicelist&hoslist和portnumebr分配给变量 所以结果应该是

请注意,每个变量前都有很多前导空格

userName1="MATT_HANS"
serviceList1="H2O"
hostList1:"159.220.108.80"
portNumber1="8149"

userName2="Geroge_lucas"
serviceList2="WWW"
hostList2:"159.220.108.70"
portNumber2="8166"
我正在使用Bounre shell/Bash

用户sed或awk是否可以在一次运行中完成此操作?如果您提供任何帮助,请解释命令;所以我将来也可以用它来营救你

$ awk -v q="\"" '/FamilyType/{f=1} 
    f && /userName|serviceList|hostList|portNumber/
                   {sub(":","1=",$1); 
                    print $1 q $3 q
                   } 
           /port:/{f=0;print ""}' file

userName1="MATT_HANS"
serviceList1="H2O"
hostList1="159.220.108.80"
portNumber1="8149"

userName1="Geroge_lucas"
serviceList1="WWW"
hostList1="159.220.108.70"
portNumber1="8166"
另外,您的主机列表有“:”符号,这会将所有内容转换为“=”符号。如果不是打字错误,你需要特别处理,但我认为没有必要

更新:为变量后缀设置增量计数器

$ awk -v q="\"" '/FamilyType/{f=1;c++} 
  f && /userName|serviceList|hostList|portNumber/
                             {sub(":",c"=",$1); 
                              print $1 q $3 q
                             } 
                      /port:/{f=0;print ""}' file

userName1="MATT_HANS"
serviceList1="H2O"
hostList1="159.220.108.80"
portNumber1="8149"

userName2="Geroge_lucas"
serviceList2="WWW"
hostList2="159.220.108.70"
portNumber2="8166"

awk
救援

$ awk -v q="\"" '/FamilyType/{f=1} 
    f && /userName|serviceList|hostList|portNumber/
                   {sub(":","1=",$1); 
                    print $1 q $3 q
                   } 
           /port:/{f=0;print ""}' file

userName1="MATT_HANS"
serviceList1="H2O"
hostList1="159.220.108.80"
portNumber1="8149"

userName1="Geroge_lucas"
serviceList1="WWW"
hostList1="159.220.108.70"
portNumber1="8166"
另外,您的主机列表有“:”符号,这会将所有内容转换为“=”符号。如果不是打字错误,你需要特别处理,但我认为没有必要

更新:为变量后缀设置增量计数器

$ awk -v q="\"" '/FamilyType/{f=1;c++} 
  f && /userName|serviceList|hostList|portNumber/
                             {sub(":",c"=",$1); 
                              print $1 q $3 q
                             } 
                      /port:/{f=0;print ""}' file

userName1="MATT_HANS"
serviceList1="H2O"
hostList1="159.220.108.80"
portNumber1="8149"

userName2="Geroge_lucas"
serviceList2="WWW"
hostList2="159.220.108.70"
portNumber2="8166"

抱歉,StackOverflow不是免费的编码服务。希望您在编写自己的代码时表现出努力。当你陷入困境时,你可以在Q中显示你的输入、所需输出、代码、当前输出和错误MSG,然后我们可以帮助你。您至少有输入和必需的输出,所以。。。你已经到一半了。祝你好运。是的-我明白了-我真的不知道从哪里开始我以前没有做过类似的事情-但是谢谢你的回复这帮不了什么忙-但是我会看看我能在谷歌上做些什么。对不起,StackOverflow不是免费的编码服务。希望您在编写自己的代码时表现出努力。当你陷入困境时,你可以在Q中显示你的输入、所需输出、代码、当前输出和错误MSG,然后我们可以帮助你。您至少有输入和必需的输出,所以。。。你已经到一半了。祝你好运。是的-我明白了-我真的不知道从哪里开始我以前没有做过类似的事情-但是谢谢你的回复这帮不了什么忙-但是我会看看我能用谷歌搜索到什么。非常感谢你。您的命令使用上述输入。在我的文件中,变量前面有前导空格,所以我得到了很多其他数据。你能去掉前导空格吗?不确定它为什么不起作用说我的文件不也是变量的第二个输出应该分配给2吗?否则,他们将被覆盖确保您的输入/输出代表您的实际数据(尽管简化)。请参阅更新,前导空格应该不重要。Thx-仍然不适用于我的输入-必须用我的输入创建另一个问题-只是不适用于我的文件。非常感谢。您的命令使用上述输入。在我的文件中,变量前面有前导空格,所以我得到了很多其他数据。你能去掉前导空格吗?不确定它为什么不起作用说我的文件不也是变量的第二个输出应该分配给2吗?除非他们被覆盖确保你的输入/输出代表你的实际数据(尽管简化了)。请参阅更新,前导空格应该不重要。Thx-仍然不适用于我的输入-必须用我的输入创建另一个问题-只是不适用于我的文件