파일 이름이 있는 새 열로 출력을 추가하는 방법

파일 이름이 있는 새 열로 출력을 추가하는 방법

하나의 출력에 각 파일의 출력을 점진적으로 추가하는 방법은 무엇입니까? 모든 파일에 대해 붙여넣기 명령을 함께 실행하지 않고 이 작업을 수행하고 싶습니다. 10,000개의 파일이 있고 각 파일의 크기는 100GB이기 때문입니다.

파일 1

a       1
b       2
c       3

파일 2

a       10
b       20
c       40

파일 3

a       0
b       0
c       0

원하는 출력

file1   file1   file2   file2   file3   file3
a       1       a       10      a       0
b       2       b       20      b       0
c       3       c       40      c       0

원하는 출력과 비슷한 것을 얻을 수 있다는 것을 알고 있지만 paste -d "\t" file{1..3}작업을 하나씩 수행하고 싶지만 모두 함께 수행하지는 않으며 중요한 것은 파일 이름을 보존하고 싶습니다.

답변1

paste파일 줄만 병합해야 한다면 명령이 좋은 선택입니다.

접두사머리글줄 및 파일 이름 사용 조합+반죽:

{ for f in file*; do awk '{ for(i=1;i<=NF;i++) printf("%s\t",FILENAME); exit }' "$f"; done; 
echo ""; paste -d"\t" file*; } | column -t

출력(3개 입력 파일용):

file1  file1  file2  file2  file3  file3
a      1      a      10     a      0
b      2      b      20     b      0
c      3      c      40     c      0

세부 사항:

  • { command; command; ...}- 여러 명령의 출력을 결합하는 데 사용됩니다.

  • for f in file*;- 각 파일에 대해

  • printf("%s\t",FILENAME)- 해당 파일의 각 열의 파일명을 출력

  • exit- 첫 번째 라인 처리 후 즉시 종료

관련 정보