awk를 사용하여 5행 이후 2행 3행을 이동합니다.

awk를 사용하여 5행 이후 2행 3행을 이동합니다.

내 파일의 내용은 다음과 같습니다.

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==32호선, 3호선인 경우
    • a[i++]=$0;next어레이를 채우고 a계속하십시오.
  • NR==55호선이라면
    • print먼저 줄을 인쇄하십시오.
    • for(c=0;c<i;c++){print a[c]}배열을 반복하고 해당 내용을 인쇄합니다.
  • 1각 줄을 인쇄하는 실제 조건입니다.

관련 정보