簡體   English   中英

awk 用於與多個分隔符進行字符串比較

[英]awk for string comparison with multiple delimiters

我有一個帶有多個分隔符的文件,我希望將第一個/之后的值與另一個文件進行比較。

代碼 :-

awk -F'[/|]' NR==FNR{a[$3]; next} ($1 in a )' file1 file2 > output

貓文件1

AAB/BBC/customer|fed|12931|
/customer|fed|982311|
BXC/DEF/OTTA|fed|92374|
AVD/customer|FST|8736481|
FFS/T6TT/BOSTON|money|18922|
GTS/trust/YYYY|opt|62376|
XXY/IJSH/trust|opt|62376|

貓文件2

customer
trust

預期輸出:-

AAB/BBC/customer|fed|12931|
/customer|fed|12931|
AVD/customer|FST|8736481|
XXY/IJSH/trust|opt|62376|
$ awk -F\| '            # just use one FS
NR==FNR {
    a[$1]
    next
}
{
    n=split($1,t,/\//)  # ... and use split to the 1st field
    if(t[n] in a)       # and compare the last split part
        print
}' file2 file1

輸出:

AAB/BBC/customer|fed|12931|
/customer|fed|982311|
AVD/customer|FST|8736481|
XXY/IJSH/trust|opt|62376|

如果你使用這個[/|]你將有 2 個分隔符,你將不知道最后一個管道之后的值是什么。

閱讀您的問題,您想比較沒有管道字符的最后一個斜杠之后的第一個值。

如果字符串中必須有/ ,您可以將其設置為字段分隔符並使用NF > 1檢查是否至少有 2 個字段

然后使用$NF獲取最后一個字段,拆分| 並檢查第一部分是否存在於存儲在數組a中的file2的一個值中

$cat file1

AAB/BBC/customer|fed|12931|
/customer|fed|982311|
BXC/DEF/OTTA|fed|92374|
AVD/customer|FST|8736481|
FFS/T6TT/BOSTON|money|18922|
GTS/trust/YYYY|opt|62376|
XXY/IJSH/trust|opt|62376|
customer

示例代碼

awk -F/ '
NR==FNR {a[$1];next}
NF > 1 {
  split($NF, t, "|")
  if(t[1] in a) print
}
' file2 file1

輸出

AAB/BBC/customer|fed|12931|
/customer|fed|982311|
AVD/customer|FST|8736481|
XXY/IJSH/trust|opt|62376|

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM