LINUX.ORG.RU

заджоинить 2 файла

 ,


0

1

хочу заджоинить два отсортированных файла по первому столбцу

1 файл

aaa 5 bbb 78 ccc 87 ddd 90

2 файл

aaa 76 4 ddd 34 6

то есть во втором файле может быть меньше ключей

нужно получить на выходе

aaa 5 76 4 bbb 78 0(или null) 0(или null) ccc 87 0(или null) 0(или null) ddd 90 34 6

join -1 1 -2 1 file1 file2

дает только для aaa и ddd

cat second_file | awk '{getline s < "first_file"; split(s, S); printf S[1]" "S[2]" "$2" "$3; i=4; k=3; for(k=3; k<9; k=k+2) { printf " "S[k]" "S[k+1]" "; if ( $i != S[k] ) printf  "0 0"; else {i++; printf $(i++)" "$(i++)}}; print "";}'

Как то так, только лучше это не в командной строке, а в отдельный файл и ″awk -f этот файл″.

mky ★★★★★
()
Ответ на: комментарий от lSergey
awk '{ key2=$1; $1=""; line2=$0; for(;;) { getline line1 < "file1"; $0=line1; key1=$1; if (key1 == key2) break; $(NF+1) = "0 0"; print } $0=$0 line2 } 1' file2
unterwulf
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.