여러 테이블을 조인하고 첫 번째 행에 헤더를 유지하고 싶습니다. 따라서 새 테이블에 조인할 때마다 새 헤더가 생기지 않습니다. 이것이 어떻게 수행되는지 아는 사람이 있습니까?
나는 현재 다음을 사용하고 있습니다 :
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 {} +
tail
POSIXly에서는 파일당 하나씩 실행 해야 합니다 .
첫 번째 파일의 헤더를 보존하려면 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"