Alright, this is what I came up with.
ls *.txt | tr -s ' ' '\n' | sed -E 's/^(.*)$/<(cut -f1 \1)/' | tr -s '\n' ' ' | awk '{ print; }' > cmd.output; sed -i -E 's/^([^\s]+)/paste \1/' cmd.output; bash cmd.output
I have two files in my current directory, a.txt and b.txt.
The first contains only the following.
a
b
c
The second file is similar.
1
2
3
I begin by getting all of the files I'm interested in. For this example, it's all the *.txt files.
$ ls *.txt
a.txt b.txt
I then split each into it's own line by transcribing each space into a newline character (I suppose col works for this, too).
$ ls *.txt | tr -s ' ' '\n'
a.txt
b.txt
Next, I create the cut command for each of the listed files using a sed regex substitution.
$ ls *.txt | tr -s ' ' '\n' | sed -E 's/^(.*)$/<(cut -f1 \1)'
<(cut -f1 a.txt)
<(cut -f1 b.txt)
I now reverse the newline-space transcription to re-format this as a single line.
$ ls *.txt | tr -s ' ' '\n' | sed -E 's/^(.*)$/<(cut -f1 \1)'
<(cut -f1 a.txt) <(cut -f1 b.txt)
I then pipe this to a file, cmd.sh (I was using tee to see the results of my fiddling while experimenting.)
$ ls *.txt | tr -s ' ' '\n' | sed -E 's/^(.*)$/<(cut -f1 \1)' > cmd.sh
Having built up the command parameters, I then used another sed regex to edit the command file in place, replacing <args> with paste <args>.
$ sed -i -E 's/^([^\s]+)/paste \1/' cmd.sh
Before:
$ cat cmd.sh
<(cut -f1 a.txt) <(cut -f1 b.txt)
After:
$ cat cmd.sh
paste <(cut -f1 a.txt) <(cut -f1 b.txt)
Finally, I call bash, passing in the filename as an argument.
$ bash cmd.sh
a 1
b 2
c 3
I'm curious to see if anyone finds a better solution. This seems... hacky.