헤더 없이 테이블 조인

헤더 없이 테이블 조인

여러 테이블을 조인하고 첫 번째 행에 헤더를 유지하고 싶습니다. 따라서 새 테이블에 조인할 때마다 새 헤더가 생기지 않습니다. 이것이 어떻게 수행되는지 아는 사람이 있습니까?

나는 현재 다음을 사용하고 있습니다 :

find "/dir/folder" name "*.dat" -exec cat {} + >> "/dir/folder/table.txt"

하지만 헤더를 제거하는 데 사용할 수 있습니다.

답변1

BSD/GNU 사용 sed:

find "/dir/folder" -name "*.dat" -exec sed -se1d {} + >> "/dir/folder/table.txt"

...모든 입력 파일을 개별적으로 처리하고 각 파일의 st 행을 d제거하도록 지시합니다.1

테이블 헤더가 table.txt에 아직 없는 경우 먼저 테이블 헤더에 넣어야 합니다.

set -- /dir/folder/*.dat
head -n1 <"$1" >>/dir/folder/table.txt
find ...

모든 *.dat일치 항목이 하위 디렉터리에 있는 경우에는 작동하지 않습니다.

{   find /dir/folder -name \*.dat -exec \
         sh -c 'head -n1 "$0"; kill "$PPID"' {} \;
    find /dir/folder -name \*.dat -exec sed -se1d {} +
}   >>/dir/folder/table.txt

그래야 합니다.

답변2

제목이 한 줄에 있으면 GNU를 사용하십시오 tail.

find "/dir/folder" -name "*.dat" -exec tail -qn +2 {} +

tailPOSIXly에서는 파일당 하나씩 실행 해야 합니다 .

첫 번째 파일의 헤더를 보존하려면 GNUly:

find "/dir/folder" -name "*.dat" -print0 | {
   IFS= read -rd '' first &&
     cat "$first" &&
     xargs -r0 tail -qn +2
}

답변3

모든 파일이 한 번의 awk호출에 들어갈 수 있는 경우:

find "/dir/folder" name "*.dat" -exec awk 'FNR == 1 && NR != 1 {next};1' {} + 

답변4

tail지정된 수의 줄을 건너뛸 수 있습니다.

find "/dir/folder" name "*.dat" -exec tail +2 {} + >> "/dir/folder/table.txt"

관련 정보