С помощью bsdtar вы можете указать glob:
for file in *.tar.bz2; do tar -jxf "$file" '*.txt'; done
С gnutar нужно добавить флаг --wildcards:
for file in *.tar.bz2; do tar -jxf "$file" --wildcards '*.txt'; done
К сожалению, желаемый формат вывода не совсем ясен из вашего вопроса.
Однако, как правило, если вы хотите обеспечить "отформатированный вывод таблицы -", вы можете попробовать передать результат вcolumn
:
awk 'BEGIN{CONVFMT="%.5f"} FNR==NR{split($0,div);next} NR>FNR{for (i=1;i<=NF;i++) $i=$i/div[i];}1' file2.txt file1.txt | column -t
, что приведет к
1 0.83333 0.60000
7 2.33333 1.40000
1 1 1
для предоставленного вами образца ввода.
Кстати, вам не нужно использовать cat
при обработке файлов сawk
(или sed
и т. д.)
Обновление
Из вашего редактирования я вижу, что все числа должны быть представлены в виде 5 -десятичных чисел с плавающей запятой -. В этом случае решение @guest является правильным, хотя использование column
все еще может быть полезно, если в любое время в будущем вы также захотите распечатать заголовки столбцов.
Если вы хотите, чтобы все поля были отформатированы как %.5f
, вы можете использоватьsprintf
:
BEGIN {
OFS = "\t"
}
NR == 1 {
cols = split($0,m)
next
}
NF == cols {
for (i=1; i<=NF; i++)
$i = sprintf("%.5f", $i/m[i])
}
1
$ awk -f above.awk file2 file1
1.00000 0.83333 0.60000
7.00000 2.33333 1.40000
1.00000 1.00000 1.00000
Приведенная выше программа awk
не предупреждает о возможных ошибках. Вы можете попробовать:
NR == 1 {
cols = split($0,m)
for (i in m)
if (m[i] == 0)
err("field "i" is "m[i]"; division by zero is fatal", 1)
next
}
NF != cols {
err("found "NF" fields, expected "cols)
next
}
{
for (i in m)
$i = sprintf("%.5f", $i/m[i])
print
}
END {
exit errs
}
function err(msg, r) {
# Print message to stderr
# Leave non-zero exit status
# Optionally go to END
printf "%s - %s.\n", "error: line "FNR" in "FILENAME, msg | "cat >&2"
errs = 1
if (r) exit
}
Кроме того, вы можете проверить, что каждое поле является числом.:Заставить awk выдавать ошибку -не числовым ; Могу ли я определить тип переменной awk?