연결하려는 여러 파일이 cat
있습니다. 의 말을하자
File1.txt
foo
File2.txt
bar
File3.txt
qux
최종 파일이 다음과 같이 보이도록 연결하고 싶습니다.
foo
bar
qux
이 대신 평소와 cat File*.txt > finalfile.txt
foo
bar
qux
그것을하는 올바른 방법은 무엇입니까?
답변
넌 할 수있어:
for f in *.txt; do (cat "${f}"; echo) >> finalfile.txt; done
finalfile.txt
위의 명령을 실행하기 전에 파일 이 존재하지 않는지 확인하십시오 .
사용이 허용되면 다음 awk
을 수행 할 수 있습니다.
awk 'FNR==1{print ""}1' *.txt > finalfile.txt
답변
각 파일을 나열 할 수있는 파일이 충분하지 않은 경우 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
답변
원하는 xargs
경우 사용하여 할 수 있지만 주요 아이디어는 여전히 동일합니다.
find *.txt | xargs -I{} sh -c "cat {}; echo ''" > finalfile.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
(이것은 후행 빈 줄을 제거합니다)
답변
이것이 내가 OsX 10.10.3에서 한 방법입니다.
for f in *.txt; do (cat $f; echo '') >> fullData.txt; done
매개 변수가없는 단순한 ‘echo’명령이 새 줄이 삽입되지 않았기 때문입니다.
답변
파이썬에서 이것은 파일 사이에 빈 줄로 연결됩니다 ( ,
추가로 뒤에 빈 줄을 추가하지 않음).
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