나는 노력한다너무 많은 행이 포함된 csv 파일을 사용자 정의 청크로 분할합니다. 행, 다음 스크립트를 사용하여앗그러나 출력이 생성되지 않고 파일이 생성되지만 비어 있습니다. 누구든지 누락된 부분을 지적해 주실 수 있나요?
# !/bin/bash
File=filename.csv
count=`awk 'END {print NR}' $File`
i=2
j=5000
k=$j
while [ $j -le $count ]
do
awk 'NR==1 {print $0}' $File > output"$i".csv
awk 'NR==$i, NR==$j {print $0}' $File > output"$i".csv
i=`expr $j + 1`
j=`expr $i + $k`
if [ $j -gt $count ]
then
j=$count
k=`expr 0 - 1`
elif [ $j -eq $count]
then
break
fi
done
답변1
정말로 사용하고 싶다면 awk
어떻게 해야 할까요 ?
awk -v c=5000 '
BEGIN{getline; head=$0; f = -1}
{if (f != int((NR-2)/c)) {f+=1; fl=sprintf("%03d.csv", f); print head > fl}; print $0 > fl}
' filename.csv
당신의 스크립트에 관해서는 ...
#!/bin/bash
File=filename.csv
count=$(awk 'END {print NR}' $File) # syntax
i=2
j=5000
k=$j
while [ $j -le $count ]
do
awk 'NR==1 {print $0}' $File > output"$i".csv
# you cannot pass shell variables directly into awk, use -v
# and append >> don't overwrite >
awk -v st=$i -v fi=$j 'NR==st, NR==fi {print $0}' $File >> output"$i".csv
i=`expr $j + 1`
j=`expr $i + $k`
if [ $j -gt $count ]
then
j=$count
k=-1
elif [ $j -eq $count ] # needed a space before the ]
then
break
fi
done