텍스트 파일의 줄을 뒤집는 방법은 무엇입니까?
-
03-07-2019 - |
문제
텍스트 파일의 줄을 뒤집어야하는 작은 쉘 스크립트를 쓰고 있습니다. 이런 종류의 일을하는 표준 필터 명령이 있습니까?
내 특정 응용 프로그램은 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와 같은 임베드 장치에 호환됩니다.
제휴하지 않습니다 StackOverflow