라인 1,2,3,4,...,n-1,n에서 라인 n,n-1,...,4,3,2,1까지

라인 1,2,3,4,...,n-1,n에서 라인 n,n-1,...,4,3,2,1까지

방금 내가 해결할 수 있다는 걸 깨달았어요이 문제행 번호를 1, 2, 3,...,n에서 n, n-1, ..., 3,2,1로 바꾼 다음 이전과 동일한 논리를 사용합니다. 그럼 행의 순서를 바꾸는 방법을 알고 싶습니다.

답변1

tac( cat역방향, 또한 포함 coreutils) cat은 파일을 역순으로 정렬합니다.

$ cat /tmp/test
One
Two
Three

$ tac /tmp/test
Three
Two
One

(당신이 언급한 특정 문제의 경우 파일을 추가하고 전체 파일을 다시 되돌릴 수 있도록 전체 파일을 반전하는 것보다 해결 방법이 더 좋습니다)

답변2

특정 문제의 경우 이는 문제를 해결하는 가장 효율적인 방법은 아니지만 다음 방법 중 하나를 사용하여 다양한 이식성 수준으로 역순으로 줄이 있는 파일을 인쇄할 수 있습니다( tac예: 기본적으로는 포함되지 않음 유닉스):

  • sed '1!G;h;$!d' [file]
  • awk '{f[n=NR]=$0}END{for(i=n;i>0;i--)print f[i]}' [file]
  • perl -e 'print reverse<>' [file]
  • tac [file]

내 시스템에서 가장 빠른 것은 다음 tac과 같이 테스트되었습니다.

$ printf '%s\n' {a..z}{a..z}{a..z} > foo
$ time sed '1!G;h;$!d' foo > /dev/null 2>&1

real    0m0.582s
user    0m0.544s
sys     0m0.012s

$ time awk '{f[n=NR]=$0}END{for(i=n;i>0;i--)print f[i]}' foo > /dev/null 2>&1

real    0m0.060s
user    0m0.052s
sys     0m0.008s

$ time perl -e 'print reverse<>' foo > /dev/null 2>&1

real    0m0.021s
user    0m0.016s
sys     0m0.004s

$ time tac foo > /dev/null 2>&1

real    0m0.003s
user    0m0.004s
sys     0m0.000s

...그러므로 가 있으면 tac사용하고, 그렇지 않으면 perl또는 을 사용하세요 awk.

답변3

이것tac유틸리티는 라인을 반전시킵니다. cat그 반대 입니다 .

답변4

GNU 유틸리티(Linux, Cygwin) 및 BusyBox에는 tac텍스트 파일의 줄 순서를 바꾸는 명령이 있습니다.

그렇지 않은 시스템에서는 tac표준 명령을 통해 작동할 수 있습니다.크리스 탕의 답변파일 전체를 메모리에 저장하여 이를 달성하는 여러 가지 방법을 보여줍니다. 매우 큰 파일의 경우 영향 없이 대부분의 unice에서 작동하는 방법은 sort반전하는 것입니다. 이는 적당한 크기의 파일에는 효율적이지 않지만 정렬 구현은 사용 가능한 메모리보다 큰 파일을 처리할 수 있는 경우가 많습니다.

nl | sort -nr | sed 's/.*\t//'

( \t리터럴 탭으로 대체합니다.)

이미Michael Mrozek은 다음과 같이 언급했습니다., 줄을 바꾸는 것은 파일에 데이터를 추가하는 끔찍한 방법입니다. 이 방법은 이해하기 어렵고 추가 작업이 많이 필요합니다.

관련 정보