使用脚本合并两个文件

使用脚本合并两个文件

我正在尝试使用脚本合并两个不同长度的文件。我希望将较长的文件附加到较短文件的末尾,并且当两个文件长度相等时,它们应该以任何顺序合并到目前为止我的脚本:

#!/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.。作为脚本语言,它有许多缺点,其中之一csh就是不支持$(),你需要 backtics。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 

您还可以使用类似命令prvim变体命令来实现它。如何在您的脚本中使用此命令(如果没有任何效果)我将留给您。但是,是的,这是一个不好的做法。这应该是你最后的手段。

相关内容