답변:
넌 할 수있어:
for f in *.txt; do (cat "${f}"; echo) >> finalfile.txt; done
finalfile.txt
위의 명령을 실행하기 전에 파일 이 존재하지 않는지 확인하십시오 .
사용이 허용되면 다음 awk
을 수행 할 수 있습니다.
awk 'FNR==1{print ""}1' *.txt > finalfile.txt
AWK '{print $0}' *.txt
awk 'FNR==1 && NR > 1 ...'
하지만 대신 이것을 사용하여 쉽게 보호 할 수 있습니다 .
>finalfile.txt
뒤에 넣으면 done
추가하는 대신 덮어 쓸 수 있습니다. 그러면 루프 전에 파일이 없거나 비어 있는지 확인하는 요구 사항이 제거됩니다.
각 파일을 나열 할 수있는 파일이 충분하지 않은 경우 Bash에서 프로세스 대체 를 사용 하여 각 파일 쌍 사이에 줄 바꿈을 삽입 할 수 있습니다 .
cat File1.txt <(echo) File2.txt <(echo) File3.txt > finalfile.txt
내가했다면 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
sed -s '$G' *.txt > finalfile.txt
find
대신 사용했기 때문에 내 PC가 충돌했습니다 *.txt
!
이것은 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
(이것은 후행 빈 줄을 제거합니다)파이썬에서 이것은 파일 사이에 빈 줄로 연결됩니다 ( ,
추가로 뒤에 빈 줄을 추가하지 않음).
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