Concatena extensões selecionadas para saída

1

Como concatenar automaticamente as extensões selecionadas para a saída com o mesmo nome de arquivo, mas extensão diferente?

Arquivos de entrada (simplificados):

File1.txt
File1.csv
File1.tsv
File2.txt
File2.csv
File2.gff

Ação: concatene os arquivos * .txt e * .csv no arquivo * .merged (mantendo o nome do arquivo original, mas extensão diferente):

cat File1.txt File1.csv > File1.merged
cat File2.txt File2.csv > File2.merged

Arquivos de saída desejados:

File1.merged
File2.merged
    
por dovah 19.11.2015 / 00:15

2 respostas

3

bash:

txt_files=( *.txt )
for f in "${txt_files[@]}"; do 
    root=${f%%.*}
    [[ -f "$root.csv" ]] && cat "$root.txt" "$root.csv" > "$root.merged"
done
    
por 19.11.2015 / 00:29
1

Aqui está um verso para fazer isso:

ls --ignore=*.tsv | grep File1 | xargs -d "\n" cat >> file.merged

ou

find . -not -name "*.tsv" -name "File1*" | xargs -d "\n" cat >> file.merged

ls lista todos os arquivos, mas ignora os que terminam em .gff. grep classifica tudo o que não é o arquivo1. O nome do arquivo é então alimentado no comando cat, em que >> os anexa ao file.merged

A única coisa ruim sobre isso é que você teria que executá-lo duas vezes, uma vez para o Arquivo1 e para o Arquivo2.

    
por 19.11.2015 / 00:17