スクリプトを使用した2つのファイルのマージ

スクリプトを使用した2つのファイルのマージ

長さの異なる2つのファイルをマージするスクリプトを使用しようとしています。長いファイルを短いファイルの末尾に追加し、2つのファイルの長さが同じ場合は、任意の順序でマージする必要があります。これまで私のスクリプトは次のようになりました。

#!/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

ベストアンサー1

スクリプトに問題がたくさんあります。最初で最も重要なことはcshいいえ。スクリプト言語として、ここには多くの欠点があり、その1つは必要なバックティックをcshサポートしていないことです。ファイルをリンクするには、プログラムのようにファイルを実行できないはずです。とにかく、内容を印刷したいと思わないでください。文法も間違っていました。最後に、そうする必要はありません。 2つのことを行うだけですので、3つの異なる条件をチェックすることはどういう意味ですか?条件の1つだけを除いて、すべて同じことを行います。$()catifelse ifif ... else

スクリプトの作業バージョンcshは次のとおりです。

#!/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

ここに欠けている部分を説明するためにbashで同じことを行うスクリプトがあります。

#!/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

おすすめ記事