http://www.charvolant.org/~doug/xkb/html/node5.html#SECTION00052000000000000000 имеет карту клавиатуры, и это - символы
Я не думаю, что можно сделать это с join
один. Вы могли сделать:
join -t, -a1 -a2 -o0,1.2,1.3,1.4,1.5,2.2,2.3,2.4,2.5 -e MISSING 1.txt 2.txt |
perl -F, -lape '@F[1..2]=@F[5..6] if $F[1] eq "MISSING";
$_=join",",@F[0..4],@F[7..8]'
-p
: используйте линию за линией цикл чтения как в sed/awk-a
, -F,
: как awk, разделение строки в поля (в @F
массив).-l
: работы над содержанием строк (работает как awk
где вход разделяется на RS
($/
) (но RS
не включенный в $0
) и ORS
($\
) добавляется прежде, чем распечатать).-e ...
: жемчуг [e] xpression для оценки для каждой строки.На самом деле, при записи того же в awk
не более сложно:
awk -F, -vOFS=, '$2 == "MISSING"{$2=$6;$3=$7}
{print $1,$2,$3,$4,$5,$8,$9}'
использование просто awk:
awk -F, -v OFS=, '
BEGIN {m = " MISSING"}
# process file1
NR == FNR {lines[$1] = $0; next}
# process file2
{
added[$1] = $4 OFS $5
if (!($1 in lines)) {
$4 = m
$5 = m
lines[$1] = $0
}
}
# print the combined output
END {
for (id in lines) {
if (!(id in added))
added[id] = m OFS m
print lines[id], added[id]
}
}
' 1.txt 2.txt | sort -n
1, abc, 123, 456, 789, 000, 000
2, lmn, 123, 456, 789, MISSING, MISSING
3, pqr, 123, 456, 789, 000, 000
9, opq, 123, MISSING, MISSING, 000, 000
Звучит так, как будто вы хотите соединить первые три поля. Затем вы должны изменить первые два разделителя, join
на новое 1-е поле, а затем восстановить разделители:
join -t, -j1 -a1 -a2 -o 0 1.2 1.3 2.2 2.3 -e " MISSING" \
<(sed 's/, /\x02/;s/, /\x02/' 1.txt) <(sed 's/, /\x02/;s/, /\x02/' 2.txt) \
| sed 's/\x02/, /g'
return
1, abc, 123, 456, 789, 000, 000
2, lmn, 123, 456, 789, MISSING, MISSING
3, pqr, 123, 456, 789, 000, 000
9, opq, 123, MISSING, MISSING, 000, 000