簡體   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