다음과 같은 문서가 있습니다.
Bob:
This is my line
This is also my line
Alfred:
What a great day!
What should we do!
Jess:
Its so hot
Lets go to the Beach
형식은 늘 똑같아 늘 똑같아
speaker
line1
line2
speaker
line1
line2
추가 줄 등은 없었습니다.
각 줄의 시작 부분에 "스피커"가 있기를 원합니다. 예를 들면 다음과 같습니다.
Bob: This is my line
Bob: This is also my line
Alfred: What a great day!
Alfred: What should we do!
Jess: Its so hot
Jess: Lets go to the Beach
awk를 사용하여 각 "n번째" 줄을 추출하려고 합니다.
awk '{if (NR % 3 == 1) print $0}'
하지만 다음 두 줄의 시작 부분에 다시 추가하는 방법을 잘 모르겠습니다.
당신의 도움을 주셔서 감사합니다
답변1
awk 'NR%3==1{ name=$0; next } { print name, $0 }' file
조건이 true이면 레코드를 변수에 저장하고 레코드 name
처리를 계속합니다 .next
그렇지 않으면 name
현재 레코드를 인쇄합니다.
답변2
나는 논리를 바꿀 것이다. 최신 발표자를 가져와 다른 발표자가 나타날 때까지 다른 모든 행 앞에 고정합니다. 텍스트가 한 줄 또는 두 줄 이상인 경우 이 방법이 더 강력할 수 있습니다.
awk '/^[[:alpha:]]+:$/ {speaker=$1;next} {print speaker,$0}' file
답변3
sed
지정된 파일 형식에 따라 다음 방법을 사용하여 완료할 수 있습니다.
sed -e '
h;N;s/\n/ /
n;H;g;s// /
' file