bash:
txt_files=( *.txt )
for f in "${txt_files[@]}"; do
root=${f%%.*}
[[ -f "$root.csv" ]] && cat "$root.txt" "$root.csv" > "$root.merged"
done
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
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.
Tags text-processing cat