[英]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
列中搜索value
在4th
5th
列中搜索blank
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.