bash의 별도 파일에 출력의 마지막 줄 추가

bash의 별도 파일에 출력의 마지막 줄 추가

나는 프로그램을 100번 반복하는 bash 스크립트를 작성했습니다. 각 반복의 출력에는 14개의 행이 있지만 나머지 분석에는 행 14(마지막 행이라고도 함)만 필요합니다.

비슷한 질문에 대한 답변을 읽었지만 모두 출력에 이름이 지정된 줄이 있다고 가정합니다. 반면 출력의 10번째 줄은 다음과 같습니다.

1 0 0.005 63.01

grep붙일 이름이 없습니다 .

나는 10행을 취하고 bash 스크립트에서 수행된 각 반복에 대해 total_output.txt다음과 같이 다른 파일()의 맨 아래에 출력을 추가하고 싶습니다.

left right p-value ratio

1 0 0.005 63.01
1 0 0.02 67.23

그리고 각 반복마다 계속됩니다. 바람직하게는 이는 동일한 bash 스크립트 내에 있으며 각 반복에 대한 프로그램 출력을 저장할 필요가 없습니다.

저는 Linux와 bash 스크립팅을 처음 접했기 때문에 이 질문이 어리석게 보인다면 사과드립니다. 비슷한 질문에 대한 답변을 내 문제에 적용하는 방법을 정말 이해할 수 없습니다.

답변1

다음을 사용하면 tail마지막 줄만 얻을 수 있습니다 .total_output.txt

your_program | tail -n 1 >> total_output.txt

명령은 세 부분으로 구성됩니다.

  • your_program프로그램을 실행하고 반복 내용을 출력합니다.
  • | tail -n 1이 출력의 마지막 줄만 가져옵니다(접두사로 파이프가 붙음).
  • >> total_output.txt지정된 파일에 마지막 줄을 추가합니다(추가 출력 리디렉터가 앞에 붙음)

답변2

편집 내용에 따라 항상 다음을 원합니다.마지막(원래 표시된 것처럼) 특정 줄 번호가 아닌 출력 줄입니다.

고정 길이 출력의 경우 원래 답변이 무효화되지는 않지만 awk행 수가 가변적이고 마지막 행만 선택하려는 경우에도 다음을 사용할 수 있습니다.

your_program | awk 'END{print}' >> total_output.txt

이는 파일 끝(또는 입력 끝)에서 "현재" 줄이 여전히 읽혀진 마지막 줄이라는 사실을 활용합니다.


원래 답변

grepawk대신 이 목적으로 사용할 수 있습니다 .

your_program | awk 'NR==14' >> total_output.txt

그러면 의 출력이 your_program으로 만 파이프되어 awk14행만 인쇄됩니다. 출력은 원하는 파일로 리디렉션됩니다(추가 모드에서).

출력이 14라인을 초과하고 효율성을 위해 트리밍하려면 다음과 같이 수정하십시오.

your_program | awk 'NR==14{print;exit}' >> total_output.txt

이 줄에 도달하자마자 프로세스가 종료됩니다 awk.

노트(당신이 출력을 썼기 때문에"10줄 정도") 출력에 실제로더 적은좋습니다. 파일에 아무것도 추가되지 않습니다!

관련 정보