简体   繁体   中英

awk for string comparison with multiple delimiters

I have a file with multiple delimiters, I m looking to compare the value after the first / when read from right left with another file.

code :-

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

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|

cat file2

customer
trust

expected output :-

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

Output:

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

If you use this [/|] you will have 2 delimiters and you will not know what the value after the last pipe was.

Reading your question, you want to compare the first value after the last slash without pipe chars.

If there has to be a / present in the string, you can set that as the field separator and check if there are at least 2 fields using NF > 1

Then take the last field using $NF , split on | and check if the first part is present in one of the values of file2 which are stored in array a

$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

Example code

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

Output

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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