파일의 마지막 줄을 이동하는 방법은 무엇입니까? [복사]

파일의 마지막 줄을 이동하는 방법은 무엇입니까? [복사]

파일 예

line 1
line 2
line 3
line 4

line 4이후에 있어야line 1

line 1
line 4
line 2
line 3

중요: 4줄 이상이 될 수 있습니다. 스크립트는 어떻게든 마지막 줄을 읽어야 한다는 것을 이해해야 합니다.아니요4호선.

답변1

또 다른 느리고 긴 버전입니다.

#!/bin/sh

if [ ! -f "$1" ]
then
    printf "No input file\n"
    exit
fi

FIRST=`head -n 1 "${1}"`
LAST=`tail -n 1 "${1}"`
MID=`sed -n '$d; 2,$p' "${1}"`
printf "${FIRST}\n${LAST}\n${MID}\n"

exit

head을 사용할 때마다 파일에 액세스하기 때문에 속도가 느려 tail집니다 sed. 대용량 파일(또는 여러 파일)에서는 이 현상이 매우 눈에 띄게 나타날 수 있습니다.

답변2

$ printf '4m1\n,p\n' | ed -s file
line 1
line 4
line 2
line 3

짧은 ed스크립트

4m1
,p

첫 번째 줄 뒤로 네 번째 줄을 이동한 다음 편집 버퍼의 내용을 터미널에 표시합니다.

결과를 새 파일에 저장하려면 다음과 같은 리디렉션을 사용할 수 있습니다.

printf '4m1\n,p\n' | ed -s file >newfile

ed아니면 파일을 저장하라고 말할 수도 있습니다

printf '4m1\nw newfile\n' | ed -s file

이 명령은 w newfile편집된 버퍼를 지정된 파일에 저장합니다. 파일 이름이 없는 명령은 w파일을 원래 파일 이름으로 다시 저장합니다.

줄 편집기는 ed파일을 메모리로 읽어들이기 때문에 파일 크기가 적당하지만 너무 크지 않은 경우(1GB 미만) 이러한 유형의 작업에 사용할 수 있습니다.


이동마지막행에서 위 명령의 항목 4으로 변경합니다.$

관련 정보