저는 세 개의 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
변수이며 현재 입력 파일의 경로 이름을 포함합니다.