두 번째 열의 값을 기준으로 여러 열로 분할하려는 대용량 파일이 있습니다. "전환 지점"에 데이터가 포함된 일련의 출력 파일을 원합니다. 스위칭 포인트가 불규칙해서 라인 번호로 나눌 수 없습니다. 아래 데이터는 약 500,000개 행의 일부를 발췌한 것입니다.
...
605.144302472158 -5.18798828125E-07 0.98388671875
606.144302469633 -5.18798828125E-07 0.98419189453125
606.644327468370 -0.000150299072265625 0.93475341796875
... (~900-1800 rows)
1505.64432519861 -0.000150115966796875 0.4075927734375
1506.14432519735 -0.000150177001953125 0.40753173828125
1507.14435219483 -3.60107421875006E-07 0.41827392578125
1508.14435219230 -3.47900390625003E-07 0.420135498046875
...
출력은 다음과 같아야 합니다. 파일 1
...
605.144302472158 -5.18798828125E-07 0.98388671875
606.144302469633 -5.18798828125E-07 0.98419189453125
파일 2
606.644327468370 -0.000150299072265625 0.93475341796875
... (900-1800 rows)
1505.64432519861 -0.000150115966796875 0.4075927734375
1506.14432519735 -0.000150177001953125 0.40753173828125
파일 3
1507.14435219483 -3.60107421875006E-07 0.41827392578125
1508.14435219230 -3.47900390625003E-07 0.420135498046875
...
사용 awk '$2>-0.000001 {print}' input.txt
그리고 awk '$2<-0.000001 {print}' input.txt
올바른 데이터를 선택할 수 있지만 $2>-0.000001이 "true"에서 "false"로 전환될 때마다 새 파일을 생성하는 방법을 모르겠습니다.
awk '{print > (++a[$2>-0.000001] ".txt")}' input.txt
출력을 파일로 인쇄를 사용하면 한 단계 더 가까워졌지만 조건을 충족하는 각 줄에 대해 별도의 파일을 인쇄합니다.
일종의 while 루프가 필요한 것 같은데 어떻게 생겼는지 잘 모르겠습니다.
답변1
특정 조건이 충족될 때마다 출력을 새 파일로 전환하려면 출력 파일의 이름을 저장하는 변수를 사용하고 해당 데이터와 일치하는 항목이 나타날 때마다 이를 변경하면 됩니다.
$ cat input
17
1
4
13
9
10
7
5
18
19
3
6
16
8
12
15
14
2
11
20
$ awk 'BEGIN { outfilenum=1; outfile="file"outfilenum} $1 > 10 { outfilenum++; outfile = "file"outfilenum} {print >> outfile}' input
$ paste file*
11 20 17 13 18 19 16 12 15 14
1 9 3 8 2
4 10 6
7
5
일치하는 선을 다음에 표시합니다.끝각 파일에 대해 수표를 다음으로 이동하십시오.뒤쪽에여기에 표시된 대로 이전 루틴 대신 루틴을 인쇄합니다.