다음 명령을 사용하여 csv 파일(sample.csv)을 분할하려고 합니다.
split -n 2 -a 1 -d sample.csv test_
동일한 크기의 파일 두 개를 얻었습니다. 하나는 헤더가 있고 다른 하나는 헤더가 없으며 끝 부분의 줄이 잘립니다.
아래 스크립트를 보면 터미널에 결과가 표시되지만 파일이 생성되지 않습니다.
split -n 1/2 -a 1 -d sample.csv test_
답변1
두 명령 모두 설계된 대로 작동하는 것 같습니다.
행을 고려하지 않는 첫 번째 분할은 바이트로 분할됩니다. 대규모 바이너리 개체를 분할할 때 유용하지만 CSV와 같은 경우에는 그다지 유용하지 않습니다.
두 번째는 문서를 잘못 읽은 것처럼 보입니다(그러나 기술적으로는 여전히 유효합니다).
내 생각엔 당신이 이렇게 하려는 것 같아요:
split -n l/2 -a 1 -d sample.csv test_
이것은 정확히 당신이 하고 있는 것처럼 보이는 것이 lower case L slash two
아니라는 점에 유의하십시오.one slash two
split
두 번째 섹션에서는 내용을 실제로 이해하지 못하기 때문에 헤더 줄이 표시되지 않습니다 .
한 가지 방법은 다음과 같은 작업을 수행하는 것입니다.
# extract header row and save
head -n1 sample.csv > header
# skip header row and split records to temporary files
tail -n+2 sample.csv | split -n l/2 -a 1 -d temp_
# make final files from header and split records
for f in temp_? ; do
cat header "$f" > "${f/temp/test}"
# clean up temporary file
rm "$f"
done
# clean up header file
rm header
답변2
답변3
여러 명령을 사용하거나 다음과 같은 더 무거운 명령을 사용해야 합니다 awk
.
$ cat in.csv
Column_1,Column_2,Column_3
A,B,C
D,E,F
G,H,I
J,K,L
M,N,O
P,Q,R
S,T,U
V,W,X
Y,Z,""
$ awk '
BEGIN { x='"$(awk 'END { print NR }' in.csv)"' / 2 }
NR==1 { print > "out1.csv"; print > "out2.csv"; next }
NR<=x { print > "out1.csv"; next }
{ print > "out2.csv" }
' in.csv
$ cat out1.csv
Column_1,Column_2,Column_3
A,B,C
D,E,F
G,H,I
J,K,L
$ cat out2.csv
Column_1,Column_2,Column_3
M,N,O
P,Q,R
S,T,U
V,W,X
Y,Z,""