패턴 사이의 줄 끝에 특정 값을 추가합니다.

패턴 사이의 줄 끝에 특정 값을 추가합니다.

텍스트 줄을 아래 줄 끝으로 이동하고 새로운 패턴 일치가 발견될 때까지 이동된 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

관련 정보