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. Compque\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).