파일 연결 및 파일 사이에 새 줄 삽입


127

연결하려는 여러 파일이 cat있습니다. 의 말을하자

File1.txt 
foo

File2.txt
bar

File3.txt
qux

최종 파일이 다음과 같이 보이도록 연결하고 싶습니다.

foo

bar

qux

이 대신 평소와 cat File*.txt > finalfile.txt

foo
bar 
qux

그것을하는 올바른 방법은 무엇입니까?


답변:


121

넌 할 수있어:

for f in *.txt; do (cat "${f}"; echo) >> finalfile.txt; done

finalfile.txt위의 명령을 실행하기 전에 파일 이 존재하지 않는지 확인하십시오 .

사용이 허용되면 다음 awk을 수행 할 수 있습니다.

awk 'FNR==1{print ""}1' *.txt > finalfile.txt

10
AWK '{print $0}' *.txt
timger 2015

7
이것은 끝에 (첫 번째 대안에서) 또는 처음 (두 번째 대안에서)에 빈 줄이 있다는 뚜렷한 결함이 있습니다. awk 'FNR==1 && NR > 1 ...'하지만 대신 이것을 사용하여 쉽게 보호 할 수 있습니다 .
tripleee

5
>finalfile.txt뒤에 넣으면 done추가하는 대신 덮어 쓸 수 있습니다. 그러면 루프 전에 파일이 없거나 비어 있는지 확인하는 요구 사항이 제거됩니다.
tripleee

53

각 파일을 나열 할 수있는 파일이 충분하지 않은 경우 Bash에서 프로세스 대체 를 사용 하여 각 파일 쌍 사이에 줄 바꿈을 삽입 할 수 있습니다 .

cat File1.txt <(echo) File2.txt <(echo) File3.txt > finalfile.txt

1
아름다운! 감사.
Bob Kocisko 2007 년

이것은 내 Letsencrypt 인증서가 .pem 파일을 만드는 데 유용했습니다.
leeman24

35

내가했다면 sed를 사용할 것입니다.

sed -e '$s/$/\n/' -s *.txt > finalfile.txt

이 sed 패턴에서 $는 두 가지 의미를 가지고 있습니다. 첫 번째는 마지막 줄 번호 (패턴을 적용 할 줄의 범위)와 일치하고 두 번째는 대체 패턴의 줄 끝과 일치합니다.

sed 버전에 -s(입력 파일을 개별적으로 처리) 없는 경우 모든 것을 루프로 수행 할 수 있습니다.

for f in *.txt ; do sed -e '$s/$/\n/' $f ; done > finalfile.txt

3
또는 GNU sed :sed -s '$G' *.txt > finalfile.txt
Ruud Helderman

단 하나의 스트림! 이것은 받아 들여진 대답이어야합니다!
Yassine ElBadaoui

조심해 , 파일이 자체에 추가되었음을 의미하는 find대신 사용했기 때문에 내 PC가 충돌했습니다 *.txt!
Xerus

11

원하는 xargs경우 사용하여 할 수 있지만 주요 아이디어는 여전히 동일합니다.

find *.txt | xargs -I{} sh -c "cat {}; echo ''" > finalfile.txt

1
감사. 나는 찾을 xargsbash는 루프보다 사용하기 훨씬 쉽습니다.
RawwrBag

9

이것은 Bash에서 작동합니다.

for f in *.txt; do cat $f; echo; done

>>(추가) 로 대답하는 것과 달리이 명령의 출력은 다른 프로그램으로 파이프 될 수 있습니다.

예 :

  • for f in File*.txt; do cat $f; echo; done > finalfile.txt
  • (for ... done) > finalfile.txt (parens는 선택 사항)
  • for ... done | less (더 적은 배관)
  • for ... done | head -n -1 (이것은 후행 빈 줄을 제거합니다)

7

이것이 내가 OsX 10.10.3에서 한 방법입니다.

for f in *.txt; do (cat $f; echo '') >> fullData.txt; done

매개 변수가없는 단순한 'echo'명령이 새 줄이 삽입되지 않았기 때문입니다.


그러면 파일 끝에 문자열이 배치됩니다. 파일 사이에 어떻게 삽입 합니까?
onassar

3

파이썬에서 이것은 파일 사이에 빈 줄로 연결됩니다 ( ,추가로 뒤에 빈 줄을 추가하지 않음).

print '\n'.join(open(f).read() for f in filenames),

다음은 셸에서 호출하여 출력을 파일로 인쇄 할 수있는 추악한 파이썬 한 줄입니다.

python -c "from sys import argv; print '\n'.join(open(f).read() for f in argv[1:])," File*.txt > finalfile.txt
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.