![awk를 사용하여 5행 이후 2행 3행을 이동합니다.](https://linux55.com/image/80940/awk%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%205%ED%96%89%20%EC%9D%B4%ED%9B%84%202%ED%96%89%203%ED%96%89%EC%9D%84%20%EC%9D%B4%EB%8F%99%ED%95%A9%EB%8B%88%EB%8B%A4..png)
내 파일의 내용은 다음과 같습니다.
this line 1 no un1x
this lines 22 0
butbutbut this 33 22 has unix
but not 1
THIS is not
butbutbut ffff
second line
awk 'NR==2 && NR==3 {f=$0;next} NR ==5 &&f{print;print f}' awk.write
여기서 문제는 5행 이후에 2행과 3행을 옮기고 싶은 값만 f
저장할 수 있다는 점이다.nr==3
답변1
노력하다:
$ awk '
FNR == 2 { l2 = $0; next } # Save 2nd line
FNR == 3 { l3 = $0; next } # Save 3rd line
FNR == 5 { # Print 5th line, follow 2nd, 3rd
print
print l2
print l3
next
}
1 # Print other lines
' <file
파일에 5줄 미만이 있으면 두 번째와 세 번째 줄이 손실됩니다.
답변2
일방 통행:
awk 'NR==2 || NR==3{a[i++]=$0;next}1;NR==5{for(j=0;j<2;j++){print a[j];}}' file
답변3
awk 'NR == 2 || NR == 3 {l = l RS $0; next}
NR == 5 {$0 = $0 l}
{print}'
답변4
여러 변수나 배열이 필요합니다. 사용 awk
:
awk 'NR==2||NR==3{a[i++]=$0;next} NR==5{print;for(c=0;c<i;c++){print a[c]}next}1' file
NR==2||NR==3
2호선, 3호선인 경우a[i++]=$0;next
어레이를 채우고a
계속하십시오.
NR==5
5호선이라면print
먼저 줄을 인쇄하십시오.for(c=0;c<i;c++){print a[c]}
배열을 반복하고 해당 내용을 인쇄합니다.
1
각 줄을 인쇄하는 실제 조건입니다.