Для gzip лучше напечатать вывод диагностики в stderr, иначе вы не сможете отличить диагностику от данных (в случае-c
).
Каждая программа может посылать свои сообщения куда угодно; gzip отправляет их в stderr
1060 /* Display statistics */
1061 if(verbose) {
1062 if (test) {
1063 fprintf(stderr, " OK");
1064 } else if (decompress) {
1065 display_ratio(bytes_out-(bytes_in-header_bytes), bytes_out,stderr);
1066 } else {
1067 display_ratio(bytes_in-(bytes_out-header_bytes), bytes_in, stderr);
1068 }
1069 if (!test && !to_stdout)
1070 fprintf(stderr, " -- %s %s", keep ? "created" : "replaced with",
1071 ofname);
1072 fprintf(stderr, "\n");
1073 }
Обходным путем может быть работа с каждой утилитой на ее собственных условиях и ожидание определенного сообщения gzip на stderr или опущение опции -v
.
Попробуйте это,
Поскольку файл отсортирован, мы можем напрямую использовать команду join
join Second First | cut -f2- -d' '
hello 0.1 c t 0.4
goodbye 0.25 g a 0.1
morning 0.567 c c 0.00004
hungry 0.76 f c 0.05
если не отсортировано, используйте код ниже:
join <(sort second) <(sort first) | cut -f2- -d' '
hello 0.1 c t 0.4
goodbye 0.25 g a 0.1
morning 0.567 c c 0.00004
hungry 0.76 f c 0.05
Это должно быть довольно просто с awk
, где вы можете обработать второй файл, чтобы использовать только первый столбец, а затем использовать первый файл для его заполнения.
awk 'FNR == NR { map[$1] = $2; next } ($1 in map) { $1 = map[$1] }1 ' second first
Другой join
подход, использующий встроенные возможности соединения:
$ join -o 2.2,1.2,1.3,1.4,1.5 <(sort file1) <(sort file2)
hello 0.1 c t 0.4
goodbye 0.25 g a 0.1
morning 0.567 c c 0.00004
hungry 0.76 f c 0.05
-o
позволяет указать выходной формат. Здесь мы указываем join
использовать второе поле файла 2 (2.2
), затем первое, второе, третье, четвертое и пятое поля файла 1(1.2,1.3,1.4,1.5
).
Использование вставки.
paste <(cut -d ' ' -f2- file2) <(cut -d ' ' -f2- file1)
Использование оболочки.
while IFS= read -r file2 <&3; do
IFS= read -r file1
printf '%s %s\n' "${file2##* }" "${file1#* }"
done 3<file2 <file1
Предостережения
Оба несортированные, и оболочка работает медленно, когда речь идет о больших файлах/данных.
Paste не имеет отступа, а имеет прямой формат.