Question: Haven't seen a solution similar enough to this yet...

I have two files each containing a list of file names. There are overlap in the contents of the files but file A contain some file names that are not in file B. Also, the file extensions are different in files A and B. That is:

```
A                     B
------------          --------------
file-1-2.txt          file-1-2.png
file-2-3.txt          file-3-4.png
file-3-4.txt
...

```

How do I combine the two files, comma-delimited, into one ignoring lines that don't match?

That is:

```
C
------------
file-1-2.txt,file-1-2.png
file-3-4.txt,file-3-4.png

```

I believe some usage of `awk` similar to the following will work:

```
awk 'FNR==NR{NOT SURE} {print $1,$2}' fileA fileB

```

Thanks in advance!

Answer: 
This pure bash solution should work and handle dots, backslashes, dashes, and other special characters in either file.

```
mapfile -t arr_a < A
mapfile -t arr_b < B

for a in "${arr_a[@]}"; do for b in "${arr_b[@]}"; do
    [[ ${a%.*} == "${b%.*}" ]] && printf '%s,%s\n' "$a" "$b" && break
done; done

```

First, we read the contents of the files into arrays, one line per item, using `mapfile`. 1 Then, for each line in `A`, we compare to each line in `B`.

To compare only the portion before the extension, we use the shell parameter expansion `${var%pattern}`, which removes the shortest match of the glob `.*`2 from the end of the filenames.

1The -t option strips the trailing newline from the array items.

2The `.` here is literal, removing a period and everything after.
The unix join command should do what you want. Set the field separator -t '.' to be a dot and join by the first column in both files. You may need to sort the files ahead of time. The sort can be done on the same command line as the join with the proper syntax. <(sort -k 2 file1.txt) <(sort file2.txt)