
awk를 사용하여 두 개의 특정 패턴과 사이에 있는 경우에만 시작하여 Record n°i#
각 줄 앞에 숫자를 삽입 하고 싶습니다 .Toto
start=ABCD
stop=EFGH
입력 파일은 다음과 같습니다. ( Blabla
실제로는 무엇이든 될 수 있음)
Blabla Toto Blabla
Blabla Toto
Toto Blabla
ABCD
Toto Blabla
Toto Blabla
Blabla
Toto Blabla
EFGH
Toto Blabla
Blabla Toto Blabla
Blabla Toto
ABCD
Toto Blabla
Blabla Toto
Toto Blabla
Toto Blabla
Blabla
EFGH
Toto Blabla
Blabla Toto
필요한 출력 파일은 다음과 같습니다.
Blabla Toto Blabla
Blabla Toto
Toto Blabla
ABCD
Record n°1#Toto Blabla
Record n°2#Toto Blabla
Blabla
Record n°3#Toto Blabla
EFGH
Toto Blabla
Blabla Toto Blabla
Blabla Toto
ABCD
Record n°1#Toto Blabla
Blabla Toto
Record n°2#Toto Blabla
Record n°3#Toto Blabla
Blabla
EFGH
Toto Blabla
Blabla Toto
다음 스크립트(bash 및 gawk v4.0.1에서 실행해야 함)를 시도했지만 작동하지 않습니다.
#!/bin/bash
awk 'BEGIN{indice=1; FS="\n"; RS=""}/^ABCD$/,/^EFGH$/{if(/^Toto/){sub(/^Toto/,"Record n° "indice"\\#Toto"); indice++}print}' input.txt > output.txt
답변1
글쎄요, cuonglm이 저를 이겼어요…
awk '/EFGH/{flag=0};
/ABCD/{flag=1};
{
if (flag && $1=="Toto" && $2=="Blabla"){
counter++;print "Record n° "counter, $0}
}' in.txt
또는 더 압축하면 다음과 같습니다.
awk '/EFGH/{flag=0};/ABCD/{flag=1};{if (flag&&$1=="Toto"&&$2=="Blabla"){counter++;print "Record n° "counter, $0}}' in.txt
답변2
POSIX 사용 awk
:
awk '
$0 == "ABCD" { n = 1 }
$0 == "EFGH" { n = 0 }
/^Toto/ && n { $0 = "Record n°" n++ "#" $0 }
1
' <file