파일이 있습니다N철사. (각 행은 "질문"을 참조하므로 Q.1
, Q.2
, , ..., 로 표시됩니다 Q.3
.) 각 행(질문)에는 값이 2, 3, 4, 5 또는 6인 "표시" 속성이 있습니다. 가지다Q.n
N값당 ⁄5개 행 .
예: 10줄 파일(예:N=10) 다음과 같이 보일 수 있습니다
amol@mypc:~$ cat questions.txt
Q.1 2 Marks
Q.2 5 Marks
Q.3 4 Marks
Q.4 3 Marks
Q.5 6 Marks
Q.6 4 Marks
Q.7 3 Marks
Q.8 2 Marks
Q.9 6 Marks
Q.10 5 Marks
5개로 나눌 수 있다는 걸 알아요동종의(즉, 모두 동일한) 유사한 내용을 가진 파일
amol@mypc:~$ grep " 2 Marks" questions.txt > questions2Marks.txt
amol@mypc:~$ grep " 3 Marks" questions.txt > questions3Marks.txt
amol@mypc:~$ grep " 4 Marks" questions.txt > questions4Marks.txt
amol@mypc:~$ grep " 5 Marks" questions.txt > questions5Marks.txt
amol@mypc:~$ grep " 6 Marks" questions.txt > questions6Marks.txt
생성된 각 파일에는N⁄ 5 줄.
나는 역연산, 즉 위의 결과를 생성하는 전치를 수행하고 싶습니다. 내 questions.txt
파일을 다음으로 분할하고 싶습니다 .N⁄ 5 개 파일: questions1.txt
,
questions2.txt
, questions3.txt
, ..., (사용questionsM.txt
중간 사이즈대표하다N⁄ 5 ) 각 파일의 길이는 5줄이며 다음과 같습니다.이질적인(즉, 모두 다릅니다).
questions1.txt
포함해야합니다
- 첫 번째 줄
questions.txt
은2 Marks
, - 첫 번째 줄
questions.txt
은3 Marks
, - 첫 번째 줄
questions.txt
은4 Marks
, - 첫 번째 줄
questions.txt
은5 Marks
, 및 - 첫 번째 줄
questions.txt
은6 Marks
,
그와 같은 순서로. questions2.txt
각각의 두 번째 줄이 포함되어야 합니다.
그래서N=10,중간 사이즈분명히 2. questions.txt
위의 예를 다음 두 파일로 분류하고 싶습니다 .
amol@mypc:~$ cat questions1.txt
Q.1 2 Marks
Q.4 3 Marks
Q.3 4 Marks
Q.2 5 Marks
Q.5 6 Marks
amol@mypc:~$ cat questions2.txt
Q.8 2 Marks
Q.7 3 Marks
Q.6 4 Marks
Q.10 5 Marks
Q.9 6 Marks
*nix 도구(sed, awk, perl, 쉘 스크립트 등)를 사용하여 이를 달성하려면 어떻게 해야 합니까?
답변1
sort -n -k2 -k1.3 file | awk '{$2!=a?x=1:x++} {print > "file"x; a=$2}'
먼저 파일을 올바르게 정렬해야 합니다. -n
파일을 숫자로 정렬하고 -k2
두 번째 필드(마커 2-6)를 기준으로 정렬한 -k1.3
다음 해당 순서로 세 번째 문자부터 시작하는 첫 번째 필드를 숫자로 정렬합니다(선행 무시 Q.
). 이제 awk
출력을 오름차순 파일(file1, file2, file3, filen...)로 분할합니다.
출력은 다음과 같습니다 file1
.
$ cat file1
Q.1 2 Marks
Q.4 3 Marks
Q.3 4 Marks
Q.2 5 Marks
Q.5 6 Marks
그리고 file2
:
$ cat file2
Q.8 2 Marks
Q.7 3 Marks
Q.6 4 Marks
Q.10 5 Marks
Q.9 6 Marks
답변2
awk 답변: 이렇게 하면 소스 파일과 동일한 순서로 질문이 배치됩니다.
$ awk '{filename = "questions" ++n[$2] ".txt"; print > filename}' questions.txt
$ cat questions1.txt
Q.1 2 Marks
Q.2 5 Marks
Q.3 4 Marks
Q.4 3 Marks
Q.5 6 Marks
$ cat questions2.txt
Q.6 4 Marks
Q.7 3 Marks
Q.8 2 Marks
Q.9 6 Marks
Q.10 5 Marks