Question

I have two tab-delimited files:

file tmp1.tsv:

1    aaa
2    bbb
3    ccc
4    ddd
5    eee

file tmp2.tsv:

3
2
4

I want to get this:

3    ccc
2    bbb
4    ddd

Using following routine:

$ cat tmp2.tsv | awk -F '\t' <magic here> tmp1.tsv

I know how to make it without stdin:

$ awk -F '\t' 'FNR==NR{ a[$1] = $2; next }{ print $1 FS a[$1] }' tmp1.tsv tmp2.tsv

But have no idea how to make it with stdin. Also, explanation of the solution will be appreciated.

Was it helpful?

Solution

Assuming your solution works as desired, it is trivial. Instead of:

 awk -F '\t' 'FNR==NR{ a[$1] = $2; next }{ print $1 FS a[$1] }' tmp1.tsv tmp2.tsv

simply do:

 < tmp2.tsv awk -F '\t' 'FNR==NR{ a[$1] = $2; next }{ print $1 FS a[$1] }' tmp1.tsv -

(Note that I've replaced cat tmp2.tsv | with a redirect to avoid UUOC.)

That is, specify a filename of - and awk will read from stdin.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top