繁体   English   中英

AWK拆分字符串并进行比较

[英]Awk splitting a string and comparison

我有一个像AS|REQ|XYZ|value=12这样的字符串,该字符串与之分割:

awk -F\| 'print {$4}' | awk -F"=" '{print $2}'

得出值12。

但是对于字符串DF|REG|EXP|value= ,它返回空白。

我需要的字符串好像在第四列中遇到value并且为空白,引发错误。 可以在awk命令中完成吗?

谢谢

通过抛出错误,您可以更具体地说明您的意思。 如果您希望程序以非零的退出代码退出,请使用if并以value` exit

$ awk 'BEGIN{exit}'
$ echo $?
0
$ awk 'BEGIN{exit 1}'
$ echo $?
1
$ awk -F\| '{split($4,a,"="); if(a[2]=="") exit 1; else print a[2]}' foo
12
$ echo $?
1

或仅显示错误消息并继续执行:

$ awk -F\| '{split($4,a,"="); print (a[2]==""?"ERROR":a[2])}' foo
12
ERROR

上面使用的测试数据:

$ cat foo
AS|REQ|XYZ|value=12
DF|REG|EXP|value=

@JamesBrown按照要求对您的问题有正确的答案,但是考虑到您发布的输入,您需要产生的所有输出是:

awk -F'=' '{print ($NF=="" ? "Error" : $NF)}' file

如果这还不是您所需要的,那么请编辑您的问题,以显示更真实的示例输入和预期输出。

大概是这样吗?

awk -F\| '{print $4}' | awk -F"=" '{if ($2 == "") print "ERROR: Empty Value"; else print $2}'

希望此命令对您有用。 下面的命令将按预期方式运行。 如果在值字段中有任何值,它将只打印该值。 否则,如果为空,则打印“错误”。 字符串被放置在test.txt中

awk -F\| '{if($4!="value=") {gsub("value=","",$4);print $4} else print "error" }' test.txt

像这样-

cat f
AS|REQ|XYZ|value=12
AS|REQ|XYZ|value=

awk -F'[|=]' '{if($4 == "value" && $5 == "") {print ("Error Found at Line: ",NR)} else {print $0}}' f
AS|REQ|XYZ|value=12
Error Found at Line:  2

4th列中搜索value4th 5th列中搜索blank

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM