각 파일 사이에 빈 줄을 사용하여 여러 텍스트 파일을 연결하는 방법은 무엇입니까? [복사]

각 파일 사이에 빈 줄을 사용하여 여러 텍스트 파일을 연결하는 방법은 무엇입니까? [복사]

저는 세 개의 html 파일이 사용되는 쉘 스크립트를 작성 중입니다. 이제 세 개의 파일을 모두 연결하여 내용을 이메일로 나에게 보내려고 합니다.

아래에서 실행하려는 파일 세 개를 참조하세요. hello.html, hello1.html, hello2.html.

이제 이 세 파일의 출력을 모두 Final.Html아래와 같은 파일에 추가하여 이메일로 보냅니다.

>Final.html
cat hello.html >> Final.html
cat hello1.html >> Final.html
cat hello2.html >> Final.html
cat Final.html | sendmail -t

이제 내가 입력한 세 파일 모두 다음과 같습니다.

$ cat hello.html
Hello world
$ cat hello1.html
india is my world
$ cat hello2.html
India is the best

메일을 보낸 후 출력되는 내용은 다음과 같습니다.

Hello world
india is my world
India is the best

내가 찾고 있는 출력은 다음과 같습니다. 각 파일 사이에 빈 줄이 있습니다. 깨끗하고 선명한 출력을 얻으세요.

Hello world

india is my world

India is the best

답변1

이렇게 하면 원하는 출력이 제공되어야 합니다.

awk 'NR>1 && FNR==1{print ""};1' ./*.html > /path/to/Final.html

(출력 파일이 입력 파일 목록에 없는지 확인하십시오)

답변2

모든 작업을 수행하려면 한 번만 사용하면 되며 cat일반적으로 표시하는 데 사용됩니다.실제로 터미널에 파일을 저장합니다.고양이- 파일 생성(즉, 함께 추가):

$ cat hello.html hello1.html hello2.html | mail -s "Subject Goes Here" [email protected]

답변3

이것은 작동합니다. 빈 줄을 추가하는 코드를 추가했습니다. echo더 많은 것을 출력하는 데에도 사용할 수 있는 개행 문자를 출력합니다.

>Final.html
cat hello.html >> Final.html
echo >> Final.html
cat hello1.html >> Final.html
echo >> Final.html
cat hello2.html >> Final.html

다음으로 괄호를 사용하여 코드 양을 줄이세요.

{
     cat hello.html
     echo
     cat hello1.html
     echo
     cat hello2.html 
}> Final.html

답변4

GNU 사용 awk( ENDFILE특수 모드 지원):

awk '1; ENDFILE { print "" }' hello.html hello1.html hello2.html >Final.html

스크립트 awk는 각 파일의 수정되지 않은 데이터를 차례로 전달합니다( 동일한 작업을 수행하는 1;로 대체 가능 ). { print }각 파일의 끝에서 이 ENDFILE블록은 빈 줄을 출력합니다.

각 파일의 데이터 앞에 파일 이름을 추가로 삽입하려면(질문의 일부가 아님):

awk 'BEGINFILE { print FILENAME } 1
     ENDFILE   { print "" }' hello.html hello1.html hello2.html >Final.html

특수 모드는 BEGINFILE유사하게 작동 ENDFILE하지만 새 파일의 첫 번째 줄을 읽기 전에 트리거됩니다. 이 FILENAME변수는 표준 awk변수이며 현재 입력 파일의 경로 이름을 포함합니다.

관련 정보