![패턴 사이의 줄 끝에 특정 값을 추가합니다.](https://linux55.com/image/203562/%ED%8C%A8%ED%84%B4%20%EC%82%AC%EC%9D%B4%EC%9D%98%20%EC%A4%84%20%EB%81%9D%EC%97%90%20%ED%8A%B9%EC%A0%95%20%EA%B0%92%EC%9D%84%20%EC%B6%94%EA%B0%80%ED%95%A9%EB%8B%88%EB%8B%A4..png)
텍스트 줄을 아래 줄 끝으로 이동하고 새로운 패턴 일치가 발견될 때까지 이동된 x 줄 값을 복사하고 싶습니다. 파일의 다른 텍스트 처리 방법을 모두 알아냈지만 모드 간 복사 및 붙여넣기가 혼란스럽습니다.
AWK/sed/grep을 통해 이를 달성할 수 있습니까? 실제 파일이 매우 커서 디스크가 매우 빨리 채워지기 때문에 csplit을 사용할 수 없습니다.
감사해요!
예를 들면 다음과 같은 텍스트 파일이 있습니다.
Voting Round 0
Ag_1 || 1 || 0 || 1 |
Ag_2 || 1 || 1 || 0 |
Ag_2 || 1 || 1 || 0 |
Ag_11 || 1 || 1 || 0 |
Voting Round 1
Ag_1 || 1 || 1 || 0 |
Ag_1 || 1 || 1 || 0 |
Ag_1 || 1 || 1 || 0 |
Ag_1 || 1 || 1 || 0 |
Voting Round 2
Ag_1 || 1 || 0 || 1 |
Ag_1 || 1 || 1 || 0 |
Ag_1 || 1 || 1 || 0 |
Ag_1 || 1 || 1 || 0 |
Voting Round 3
Ag_1 || 1 || 0 || 1 |
Ag_11 || 1 || 1 || 0 |
Ag_1 || 1 || 1 || 0 |
Ag_1 || 1 || 1 || 0 |
다음과 같은 것을 생성하고 싶습니다.
Ag_1 || 1 || 0 || 1 | 0
Ag_2 || 1 || 1 || 0 | 0
Ag_2 || 1 || 1 || 0 | 0
Ag_11 || 1 || 1 || 0 | 0
Ag_1 || 1 || 1 || 0 | 1
Ag_1 || 1 || 1 || 0 | 1
Ag_1 || 1 || 1 || 0 | 1
Ag_1 || 1 || 1 || 0 | 1
Ag_1 || 1 || 0 || 1 | 2
Ag_1 || 1 || 1 || 0 | 2
Ag_1 || 1 || 1 || 0 | 2
Ag_1 || 1 || 1 || 0 | 2
Ag_1 || 1 || 0 || 1 | 3
Ag_11 || 1 || 1 || 0 | 3
Ag_1 || 1 || 1 || 0 | 3
Ag_1 || 1 || 1 || 0 | 3
답변1
이것은 아마도 당신이 원하는 것입니다:
$ awk '/\|/{print $0 n; next} {n=$NF} !NF' file
Ag_1 || 1 || 0 || 1 |0
Ag_2 || 1 || 1 || 0 |0
Ag_2 || 1 || 1 || 0 |0
Ag_11 || 1 || 1 || 0 |0
Ag_1 || 1 || 1 || 0 |1
Ag_1 || 1 || 1 || 0 |1
Ag_1 || 1 || 1 || 0 |1
Ag_1 || 1 || 1 || 0 |1
Ag_1 || 1 || 0 || 1 |2
Ag_1 || 1 || 1 || 0 |2
Ag_1 || 1 || 1 || 0 |2
Ag_1 || 1 || 1 || 0 |2
Ag_1 || 1 || 0 || 1 |3
Ag_11 || 1 || 1 || 0 |3
Ag_1 || 1 || 1 || 0 |3
Ag_1 || 1 || 1 || 0 |3
아니면:
$ awk '/\|/{print $0 c+0; next} !NF{print; c++}' file
Ag_1 || 1 || 0 || 1 |0
Ag_2 || 1 || 1 || 0 |0
Ag_2 || 1 || 1 || 0 |0
Ag_11 || 1 || 1 || 0 |0
Ag_1 || 1 || 1 || 0 |1
Ag_1 || 1 || 1 || 0 |1
Ag_1 || 1 || 1 || 0 |1
Ag_1 || 1 || 1 || 0 |1
Ag_1 || 1 || 0 || 1 |2
Ag_1 || 1 || 1 || 0 |2
Ag_1 || 1 || 1 || 0 |2
Ag_1 || 1 || 1 || 0 |2
Ag_1 || 1 || 0 || 1 |3
Ag_11 || 1 || 1 || 0 |3
Ag_1 || 1 || 1 || 0 |3
Ag_1 || 1 || 1 || 0 |3
또는:
$ awk '/Voting/{c=$NF; next} {print $0 (NF ? c : "")}' file
Ag_1 || 1 || 0 || 1 |0
Ag_2 || 1 || 1 || 0 |0
Ag_2 || 1 || 1 || 0 |0
Ag_11 || 1 || 1 || 0 |0
Ag_1 || 1 || 1 || 0 |1
Ag_1 || 1 || 1 || 0 |1
Ag_1 || 1 || 1 || 0 |1
Ag_1 || 1 || 1 || 0 |1
Ag_1 || 1 || 0 || 1 |2
Ag_1 || 1 || 1 || 0 |2
Ag_1 || 1 || 1 || 0 |2
Ag_1 || 1 || 1 || 0 |2
Ag_1 || 1 || 0 || 1 |3
Ag_11 || 1 || 1 || 0 |3
Ag_1 || 1 || 1 || 0 |3
Ag_1 || 1 || 1 || 0 |3
많은 가능성이 있습니다.
답변2
gawk/mawk/nawk '/^V/{__=substr($NF,(getline)^_)\
\
} !NF || ($+_=($+_)__)'
Ag_1 || 1 || 0 || 1 |0
Ag_2 || 1 || 1 || 0 |0
Ag_2 || 1 || 1 || 0 |0
Ag_11 || 1 || 1 || 0 |0
Ag_1 || 1 || 1 || 0 |1
Ag_1 || 1 || 1 || 0 |1
Ag_1 || 1 || 1 || 0 |1
Ag_1 || 1 || 1 || 0 |1
Ag_1 || 1 || 0 || 1 |2
Ag_1 || 1 || 1 || 0 |2
Ag_1 || 1 || 1 || 0 |2
Ag_1 || 1 || 1 || 0 |2
Ag_1 || 1 || 0 || 1 |3
Ag_11 || 1 || 1 || 0 |3
Ag_1 || 1 || 1 || 0 |3
Ag_1 || 1 || 1 || 0 |3