스크립트를 사용하여 두 파일 병합

스크립트를 사용하여 두 파일 병합

길이가 다른 두 파일을 병합하는 스크립트를 사용하려고 합니다. 더 긴 파일을 더 짧은 파일의 끝에 추가하고 두 파일의 길이가 같을 때 어떤 순서로든 병합해야 합니다. 지금까지 내 스크립트는 다음과 같습니다.

#!/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지원하지 않는다는 것입니다 . 파일을 연결하려면 프로그램처럼 파일을 실행할 수 없어야 합니다. 어쨌든, 내용을 인쇄하고 싶다면 안 됩니다. 문법도 틀렸어요. 마지막으로, 그럴 필요가 없습니다 . 두 가지 작업만 수행하면 되므로 세 가지 다른 조건을 확인하는 것이 무슨 의미가 있습니까? 조건 중 하나만 제외하고 모두 동일한 작업을 수행하므로 을 사용하세요 .$()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

답변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스크립트에서 이 명령을 사용하는 방법(효과가 없는 경우)은 여러분에게 맡기겠습니다. 하지만 그렇습니다. 이것은 나쁜 습관입니다. 이것이 최후의 수단이 되어야 합니다.

관련 정보