我有一個帶有多個分隔符的檔案,我希望將第一個之后的值/與另一個檔案進行比較。
代碼 :-
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|
uj5u.com熱心網友回復:
$ 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|
uj5u.com熱心網友回復:
如果您使用它[/|],您將有 2 個分隔符,并且您將不知道最后一個管道之后的值是什么。
閱讀您的問題,您想比較沒有管道字符的最后一個斜杠之后的第一個值。
如果/字串中必須存在,您可以將其設定為欄位分隔符并檢查是否至少有 2 個欄位使用NF > 1
然后使用最后一個欄位$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|
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/496516.html
