Você pode fazer:
paste_with_header() (
IFS=$(printf '\t') # or IFS=$'\t' with some shells
printf '%s\n' "$*"
paste -- "$@"
)
paste_with_header text_file* > all_data.txt
"$*"
é expandido para a lista de parâmetros posicionais (os argumentos para a função) associados ao primeiro caractere de $IFS
, que definimos como TAB
, o caractere que paste
também usa para unir linhas do arquivo.
Para remover as extensões de arquivo no cabeçalho, com zsh
:
paste_with_header() (
printf '%s\n' ${(pj:\t:)@:r}
paste -- "$@"
)
-
${@:r}
expande para o nome da raiz (extensão removida) de cada parâmetro posicional. -
Sinalizador de expansão do parâmetro
j:\t:
para ingressar em\t
. Comp
que\t
é interpretado comoTAB
Ou com ksh93
, zsh
ou bash
, os arquivos assumidos têm uma extensão ou nenhum diretório em seus componentes de caminho contém pontos:
paste_with_header() (
IFS=$'\t'
printf '%s\n' "${@%.*}"
paste -- "$@"
)
${@%.*}
remove a parte mais curta que corresponde a .*
do final de cada um dos parâmetros posicionais ( foo.txt
se torna foo
, mas lembre-se de que ./foo
se torna a string vazia).
(obviamente, os nomes dos arquivos não contêm tabulações ou caracteres de nova linha).