tac
명령 을 사용하지 않고 파일에서 줄을 뒤로 인쇄하고 싶습니다 . bash로 그러한 일을하는 다른 해결책이 있습니까?
답변
sed
에뮬레이션을 사용 하여 tac
:
sed '1!G;h;$!d' ${inputfile}
답변
로 ed
:
ed -s infile <<IN
g/^/m0
,p
q
IN
당신이 경우 BSD
/ OSX
(희망 곧 에 GNU
/ linux
너무로 는 POSIX 될 것입니다 ) :
tail -r infile
답변
awk '{a[i++]=$0} END {for (j=i-1; j>=0;) print a[j--] }' file.txt
하나의 라이너 를 통해
답변
bash에서 요청한 것처럼 awk, sed 또는 perl을 사용하지 않고 bash 함수 만 사용하는 솔루션이 있습니다.
reverse ()
{
local line
if IFS= read -r line
then
reverse
printf '%s\n' "$line"
fi
}
의 출력
echo 'a
b
c
d
' | reverse
이다
d
c
b
a
예상대로.
그러나 행은 메모리에 저장되며 각 행마다 한 줄씩 함수 인스턴스라고합니다. 큰 파일을 조심하십시오.
답변
다음을 통해 파이프 할 수 있습니다.
awk '{print NR" "$0}' | sort -k1 -n -r | sed 's/^[^ ]* //g'
awk
프리픽스는 행 번호와 각 행은 공백. 는 sort
역순 숫자 스타일 첫번째 필드 (행 번호)에 의해 정렬 라인들의 순서를 반전. 그리고 sed
줄 번호를 제거합니다.
다음 예제는이를 실제로 보여줍니다.
pax$ echo 'a
b
c
d
e
f
g
h
i
j
k
l' | awk '{print NR" "$0}' | sort -k1 -n -r | sed 's/^[^ ]* //g'
출력합니다 :
l
k
j
i
h
g
f
e
d
c
b
a
답변
펄에서 :
cat <somefile> | perl -e 'while(<>) { push @a, $_; } foreach (reverse(@a)) { print; }'
답변
BASH 전용 솔루션
bash 배열로 파일을 읽고 (한 줄 = array의 한 요소) 배열을 역순으로 인쇄하십시오.
i=0
while read line[$i] ; do
i=$(($i+1))
done < FILE
for (( i=${#line[@]}-1 ; i>=0 ; i-- )) ; do
echo ${line[$i]}
done