Mesclando dois arquivos usando scripts

1

Eu estou tentando mesclar dois arquivos de diferentes comprimentos usando um script. Eu quero que o arquivo mais longo seja anexado ao final do arquivo mais curto e quando ambos os arquivos forem de tamanho igual, eles devem ser mesclados em qualquer ordem Meu script até agora:

#!/bin/csh -f
echo ENTER a file name
set fl1 = $<
echo ENTER a second file name
set fl2 = $<

var1 = $( wc -c $fl1 )
var2 = $( wc -c $fl2 )

if ( ! -e $fl1 && ! -e $fl2 ) then
        echo File does not exist
        echo -n Please enter a vaild file name

else if { $var1 -lt $var2 } then
        $fl2 >> $fl1
else if { $var1 -gt $var2 } then
        $fl1 >> $fl2
else if { $var1 -eq $var2 } then
        $fl2 >> $fl1 || $fl1 >> $fl2
endif
    
por NOOBCAKE 27.11.2015 / 13:49

2 respostas

2

Existem vários problemas com o seu script. O primeiro e mais importante é que você está usando csh . Não . Entre suas muitas falhas como linguagem de script, csh não suporta $() , você precisa de backtics. Você também precisa de cat para concatenar arquivos, você não pode simplesmente executar o arquivo como se fosse um programa. Não, se você quiser imprimir o seu conteúdo, de qualquer maneira. Você também tem a sintaxe if errada. Finalmente, você não precisa de else if . Como você só tem duas ações para executar, qual é o objetivo de verificar três condições diferentes? Todas as condições, exceto uma, farão o mesmo, portanto, use apenas if ... else .

Uma versão funcional do seu script em csh seria:

#!/home/terdon/bsd-csh -f
echo ENTER a file name
set fl1 = $<
echo ENTER a second file name
set fl2 = $<

set var1 = 'wc -c < "$fl1"'
set var2 = 'wc -c < "$fl2"'


echo "V: $var1 $var2"
if ( ! -e "$fl1" && ! -e "$fl2" ) then
        echo File does not exist
        echo -n Please enter a vaild file name

else if ( "$var1" > "$var2" ) then
      cat "$fl2" >> "$fl1"
else
        cat "$fl1" >> "$fl2"
endif

Aqui está um script com a mesma funcionalidade no bash, apenas para ilustrar o que está faltando:

#!/bin/bash
read -p "ENTER a file name:" fl1
read -p "ENTER a second file name:" fl2

[[ -e "$fl1" &&  -e "$fl2" ]] ||
    echo "File does not exist, please enter a vaild file name" && exit;

if [[ $(wc -c "$fl1") -lt $(wc -c "$fl2") ]]
then
    cat "$fl2" >> "$fl1"
else
    cat "$fl1" >> "$fl2"
fi
    
por 27.11.2015 / 15:22
0

Se nada funcionar, você sempre pode colocar um comando que faz o que você está tentando fazer (bem quase) em seu script, há muitas maneiras de fazê-lo, por exemplo

to join file1.txt, file2.txt and file3.txt consecutively together to new file: file4.txt use:

copy/b file1.txt +file2.txt +file3.txt file4.txt

or:

copy/b *.txt newfile.txt 

você também pode usar comandos como pr e vim variants para alcançá-lo. Como usar esses comandos no seu script (se nada estiver funcionando) eu vou deixar você. Mas sim, esta é uma prática ruim. Este deve ser seu último recurso.

    
por 27.11.2015 / 16:31