長さの異なる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つだけを除いて、すべて同じことを行います。$()
cat
if
else if
if ... 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
答え2
何も機能しない場合は、実行したい操作を(ほぼ)実行するコマンドを常にスクリプトに含めることができます。これを行う方法はいくつかあります。
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
これを達成するために、同様のコマンドとpr
バリアントコマンドを使用することもできます。vim
スクリプトでこのコマンドを使用する方法(効果がない場合)はあなたに任せます。しかし、そうです。これは悪い習慣です。これが最後の手段でなければなりません。