[shell] 파일에서 줄 순서를 바꾸려면 어떻게해야합니까?

각 줄의 내용을 유지하면서 텍스트 파일 (또는 stdin)의 줄 순서를 바꾸고 싶습니다.

즉, 다음으로 시작하십시오.

foo
bar
baz

나는 끝내고 싶다

baz
bar
foo

이에 대한 표준 UNIX 명령 줄 유틸리티가 있습니까?



답변

BSD 꼬리 :

tail -r myfile.txt

참조 : FreeBSD , NetBSD , OpenBSDOS X 매뉴얼 페이지.


답변

또한 언급 할 가치가 있습니다 : tac(the, ahem, reverse of cat). coreutils일부 입니다.

한 파일을 다른 파일로 뒤집기

tac a.txt > b.txt


답변

있다 잘 알려진 나오지 트릭 :

# reverse order of lines (emulates "tac")
# bug/feature in HHsed v1.5 causes blank lines to be deleted
sed '1!G;h;$!d'               # method 1
sed -n '1!G;h;$p'             # method 2

(설명 : 버퍼를 유지하기 위해 비 초기 라인 앞에 추가, 라인 교체 및 버퍼 유지, 끝에 라인 인쇄)

또는 awk one-liners에서 (빠른 실행으로) :

awk '{a[i++]=$0} END {for (j=i-1; j>=0;) print a[j--] }' file*

기억이 안 나면

perl -e 'print reverse <>'

GNU 유틸리티를 갖춘 시스템에서 다른 대답은 더 간단하지만 전 세계가 GNU / Linux는 아닙니다 …


답변

명령이 끝나면 다음을 입력하십시오.
| tac

tac은 정확히 당신이 요구하는 것을 수행합니다. “각 줄을 표준 출력에 마지막 줄에 기록하십시오.”

tac는 cat :-)의 반대입니다.


답변

당신은에 될 일 경우 vim사용

:g/^/m0


답변

tac <file_name>

예:

$ cat file1.txt
1
2
3
4
5

$ tac file1.txt
5
4
3
2
1


답변

$ (tac 2> /dev/null || tail -r)

tacLinux에서 작동하는을 사용해보십시오 . 그래도 작동하지 않으면 tail -rBSD 및 OSX에서 작동합니다.