문제

텍스트 파일의 줄을 뒤집어야하는 작은 쉘 스크립트를 쓰고 있습니다. 이런 종류의 일을하는 표준 필터 명령이 있습니까?

내 특정 응용 프로그램은 GIT 커밋 식별자 목록을 받고 있으며 리버스 순서로 처리하고 싶습니다.

git log --pretty=oneline work...master | grep -v DEBUG: | cut -d' ' -f1 | reverse

내가 생각해 낸 최고는 구현하는 것입니다 reverse 이와 같이:

... | cat -b | sort -rn | cut -f2-

이것은 사용합니다 cat 그러면 모든 라인을 숫자로 숫자 sort 내림차순 숫자 순서로 정렬하려면 (전체 파일을 되돌릴 수 있음) cut 불필요한 줄 번호를 제거합니다.

위의 것은 내 응용 프로그램에 대해 작동하지만 일반적인 경우에는 실패 할 수 있습니다. cat -b 숫자가 아닌 숫자 만.

더 나은 일반적인 방법이 있습니까?

도움이 되었습니까?

해결책

~ 안에 GNU Coreutils, 거기 있습니다 TAC (1)

다른 팁

답변은 42가 아니라 tac.

편집하다: 느리지 만 더 많은 메모리 소비를 사용합니다 sed

sed 'x;1!H;$!d;x'

그리고 더 길다

perl -e'print reverse<>'

이있다 기준 귀하의 목적을위한 명령 :

tail -r file.txt

파일 라인을 역 순서로 인쇄합니다!

Cat -B 만 숫자가 아닌 줄 라인 "


그것이 당신이 피하고 싶은 유일한 문제라면, 왜 "cat -n"을 사용하여 모든 줄을 숫자로 번호를 매기는 이유는 무엇입니까?

:   "@(#)$Id: reverse.sh,v 1.2 1997/06/02 21:45:00 johnl Exp $"
#
#   Reverse the order of the lines in each file

awk ' { printf("%d:%s\n", NR, $0);}' $* |
sort -t: +0nr -1 |
sed 's/^[0-9][0-9]*://'

나를위한 매력처럼 작동합니다 ...

와 비슷합니다 sed 위의 예, 사용 - 어쩌면 더 기억에 남을 것입니다 (뇌가 어떻게 유선하는지에 따라) :

perl -e 'print reverse <>'

이 경우 사용하십시오 --reverse:

$ git log --reverse --pretty=oneline work...master | grep -v DEBUG: | cut -d' ' -f1
rev <name of your text file.txt>

당신은 이것을 할 수 있습니다 :

echo <whatever you want to type>|rev
awk '{a[i++]=$0}END{for(;i-->0;)print a[i]}'

더 빠릅니다 sed 그리고 OpenWrt와 같은 임베드 장치에 호환됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top