Соедините две таблицы с помощью AWK, одну из стандартного ввода, другую из файла

У меня есть два файла с разделителями табуляции:

файл tmp1.tsv:

1    aaa
2    bbb
3    ccc
4    ddd
5    eee

файл tmp2.tsv:

3
2
4

Я хочу получить это:

3    ccc
2    bbb
4    ddd

Используя следующую процедуру:

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

Я знаю, как сделать это без стандартного ввода:

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

Но понятия не имею, как это сделать с помощью стандартного ввода. Кроме того, будет оценено объяснение решения.


person Kostya    schedule 21.04.2014    source источник
comment
Проверьте это: theunixshell.blogspot.in/2012 /12/   -  person Vijay    schedule 27.04.2014


Ответы (1)


Предполагая, что ваше решение работает так, как хотелось бы, это тривиально. Вместо:

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

просто сделайте:

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

(Обратите внимание, что я заменил cat tmp2.tsv | на перенаправление, чтобы избежать UUOC.)

То есть укажите имя файла -, и awk будет читать со стандартного ввода.

person William Pursell    schedule 21.04.2014