Diff the output of two `awk` commands
6,657
diff
expects the names of two files, so you should put the two output on two files, then compare them:
awk '{print $3}' f1.txt | sort -u > out1
awk '{print $2}' f2.txt | sort -u > out2
diff out1 out2
or, using ksh93
, bash
or zsh
, you can use process substitution:
diff <(awk '{print $3}' f1.txt | sort -u) <(awk '{print $2}' f2.txt | sort -u)
Related videos on Youtube
Author by
Falanwe
Updated on September 18, 2022Comments
-
Falanwe almost 2 years
I'm trying to compute the difference between the output of two
awk
commands but my simple attempts at it seem to be failing. Here is what I'm trying:diff $(awk '{print $3}' f1.txt | sort -u) $(awk '{print $2}' f2.txt | sort -u)
This doesn't work for reasons unknown to me. I was under the assumption that
$()
construct was used to capture the output of another command but my "diff" invocation fails to recognize the two inputs given to it. Is there any way I can make this work.By the way, I can't use the obvious solution of writing the output of those two commands to separate files given that I'm logged on to a production box with no 'write' privileges.
-
Admin over 12 yearstry writing output of both awk functions into different files and compare them using diff command
-
Admin over 12 yearsUnfortunately that isn't acceptable since I'm logged on to a production box with no write access.
-
-
Falanwe over 12 yearsWow, the second solution works like a charm (unfortunately can't use first since I can't create a file on that box). BTW, can you throw some pointers/links on what kind of black magic this
<()
construct is and what is it called? -
enzotib over 12 years@sasuke: See this other answer: unix.stackexchange.com/questions/22645/…
-
Johan over 12 years@sasuke you don't need to put outX in the same dir, you could put them in ~/ or /tmp/. You should have some place on the machine you could create tmp files even on a "production box".
-
Kusalananda over 5 years@sasuke
/tmp
should still be writable though, or the system is truly borked.