Добрый день! Есть 2 таблицы.
c:\nncron>cat A.txt
Lubos John Linda Rares Rick
A B C E
4 1 2 3
c:\nncron>cat B.txt
Anna Linda Rares John Max
F G E I
4 2 3 1
c:\nncron>cat C.txt
Lubos John Linda Rares Rick Anna Max
A B C E
4 1 2 3
E F G I
1 2 3 4
c:\nncron>gawk -F"\t" -v OFS="\t" "NF=5"
c:\nncron>gawk -F\x09 "{OFS = FS}{ for (i=1; i<=NF; i++) print i,NR,$i}" | sort -nk1,1 -k2,2 | gawk -F\x09 " NR>1 && $2==1 { print \"\" }; { printf \"%s\x09\",$3 }; END { print \"\" }" | cut -f 1-3 | sort -k1"
c:\nncron>cat A_transp.txt
John A 1
Linda B 2
Lubos 4
Rares C 3
Rick E
c:\nncron>cat B_transp.txt
Anna 4
John E 1
Linda F 2
Max I
Rares G 3
Вторым существенным недостатком данной утилиты является то, что при использовании ключа -a2 непарные строки таблицы 2 в выводятся без отступов слева, то есть ячейки непарных строк таблицы 2 фактически находятся в полях таблицы 1, что усложняет дальнейшее построение объединенной таблицы. Кроме того, если в исходной таблице идут 2 символа разделителя подряд, например 2 TAB, то в объединенной таблице будет один TAB. Опция -e, замещающая входные пустые ячейки, работает некорректно, заменяются не все пустые ячейки. Поэтому пустые ячейки исходной таблицы приходится заменять с помощью sed. Допустим, я делаю это и использую join:
c:\nncron>sed -i "s/\t\(\t\|$\)/\tNULL0\1/g" A_transp.txt
John A 1
Linda B 2
Lubos NULL0 4
Rares C 3
Rick E NULL0
c:\nncron>sed -i "s/\t\(\t\|$\)/\tNULL0\1/g" B_transp.txt
Anna NULL0 4
John E 1
Linda F 2
Max I NULL0
Rares G 3
c:\nncron>join -j 1 -a1 -a2 A_transp.txt B_transp.txt
Anna NULL0 4
John A 1 E 1
Linda B 2 F 2
Lubos NULL0 4
Max I NULL0
Rares C 3 G 3
Rick E NULL0
c:\nncron>join -j 1 -a1 -a2 A_transp.txt B_transp.txt | sed -e "s/ /\t/g;s/NULL0//g"
Anna 4
John A 1 E 1
Linda B 2 F 2
Lubos 4
Max I
Rares C 3 G 3
Rick E
c:\nncron>cat C.txt | gawk -F\x09 "{OFS = FS}{ for (i=1; i<=NF; i++) print i,NR,$i}" | sort -nk1,1 -k2,2 | gawk -F\x09 " NR>1 && $2==1 { print \"\" }; { printf \"%s\x09\",$3 }; END { print \"\" }" | cut -f 1-5
Lubos 4
John A 1 E 1
Linda B 2 F 2
Rares C 3 G 3
Rick E
Anna 4
Max I
Вот собственно я хотел бы спросить форумчан, может быть кто из вас сталкивался с такой задачей и каким способом вы ее решали. Может быть, существует более легкий и просто способ. Желательно с помощью утилит unixutils, не прибегая к сторонним ЯП.