
변수를 작성하는 방법을 모르겠습니다.sed
그래서 for 루프를 사용하여 다음 작업을 수행하고 싶습니다.
sed -n '1,200p' big_file.txt > 1to200.txt sed -n '201,400p' big_file.txt > 201to400.txt sed -n '401,600p' big_file.txt > 401to600.txt sed -n '601,800p' big_file.txt > 601to800.txt sed -n '801,1000p' big_file.txt > 801to1000.txt sed -n '1001,1200p' big_file.txt > 1001to1200.txt sed -n '1201,1400p' big_file.txt > 1201to1400.txt sed -n '1401,1600p' big_file.txt > 1401to1600.txt sed -n '1601,1800p' big_file.txt > 1601to1800.txt sed -n '1801,2000p' big_file.txt > 1801to2000.txt sed -n '2001,2200p' big_file.txt > 2001to2200.txt sed -n '2201,2400p' big_file.txt > 2201to2400.txt sed -n '2401,2600p' big_file.txt > 2401to2600.txt sed -n '2601,2800p' big_file.txt > 2601to2800.txt sed -n '2801,3000p' big_file.txt > 2801to3000.txt sed -n '3001,3200p' big_file.txt > 3001to3200.txt sed -n '3201,3400p' big_file.txt > 3201to3400.txt sed -n '3401,3600p' big_file.txt > 3401to3600.txt sed -n '3601,3800p' big_file.txt > 3601to3800.txt sed -n '3801,4000p' big_file.txt > 3801to4000.txt
내가 시도한 것:
j=0
for ((i=1;i<=3801;i=$i+200))
do
#echo $m,$n
j=$j + 200
sed -n '$i,$j p' big_file.txt > $ito$j.txt
done
이 일을 도와주세요. 설명도 부탁드립니다.
답변1
sed를 호출하는 대신 단일 awk 프로그램으로 이 작업을 수행하겠습니다.N타임스
awk '
BEGIN {incr = 200; i=1-incr; j=0}
NR % incr == 1 {
i += incr
j += incr
close(out)
out = i "to" j ".txt"
}
{print > out}
' big_file.txt
큰 파일을 4000¼200=20번 처리하는 대신 한 번만 처리하면 되므로 이 방법이 더 빠릅니다.
답변2
닫다.
에서는 j=$j + 200
산술 확장(예: )을 명시적으로 호출해야 합니다 j=$(( j + 200 ))
.
그리고 sed -n '$i,$j p' big_file.txt > $ito$j.txt
1)에서는 에 대한 인수에 작은따옴표 대신 큰따옴표를 사용해야 합니다 sed
. 그렇지 않으면 은 $
문자 그대로 받아들여지고 변수는 확장되지 않기 때문입니다. 2) 유효한 변수 확장이므로 i
주위 에 중괄호가 필요합니다 .$ito
$
또한 산술 컨텍스트에서는 변수 이름 앞에 를 사용할 필요가 없습니다(아마도 사용해서는 안 됩니다) .
그래서 저는 이것을 다음과 같이 다시 작성하겠습니다.
j=0
for (( i = 1 ; i <= 3801 ; i = i + 200)); do
j=$((j + 200))
sed -n "$i,$j p" big_file.txt > "${i}to$j.txt"
done
다른 사람들이 댓글을 달았듯이, 아마도 더 좋은 방법이 있을 것입니다. 이제 분할한 각 조각에 대해 파일 전체를 한 번씩 살펴보기 때문입니다.