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

연결하려는 여러 파일이 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