다른 프로그램의 출력을 요약하는 작은 AWK 스크립트가 있습니다. 명령 자체 전에 해당 요약을 인쇄하려고 하는데 좋은 방법을 찾을 수 없습니다. 나의 순진한 첫 번째 해결책은 명령을 두 번 실행하는 것이었습니다. 한 번은 요약 정보를 얻고 한 번은 요약이 추가된 전체 출력을 인쇄했습니다. 이제는 tee
프로그램 출력을 한 번 읽고 사용 head
하고 tail
이동하는 데 익숙해졌습니다 . 이는 이전 버전보다 약 3배 더 빠릅니다.
현재 버전은 다음과 같습니다.
program | awk ... | tee >(head -n -3) >(tail -n -3) > /dev/null
원하는 출력을 제공하지만 내가 확신하는 것만큼 우아하고 빠르지는 않습니다. 적어도 /dev/null로 리디렉션하지 않아도 되는 방법이 있다고 생각하지만 이를 달성하기 위한 배열을 알 수 없습니다.
유사한 질문에 대한 몇 가지 답변을 사용하여 본 적이 ed
있으며 동일한 작업을 수행하고 싶지만 명령을 파이프로 연결하려고 하면 ed
작동하지 않습니다. 구체적으로 내 생각에는
echo -e "$-2,$m0\n,p\nQ" | ed <(program | awk ...)
명령을 실행하면 ed
작동하기 때문에 작동해야 하지만 문제를 "$-2" 주소로 좁혔습니다. 파이핑할 때는 작동하지 않는 것 같지만 ed
직접 실행할 때는 작동합니다. 저는 이 부분을 GNU 버전 1.9와 1.16에서 테스트했습니다. 두 경우 모두 해당 옵션을 사용하면 -v
"잘못된 명령 접미사" 오류가 발생합니다. 달리는 것조차
echo "$-2,$p" | ed -v filename
이 오류가 발생하므로 프로세스 교체 문제가 아닙니다. 나는 분명히 ed를 사용한 지 한 시간도 채 되지 않아 ed에서 버그를 발견했다고 의심했기 때문에 내가 뭘 잘못하고 있는지 여기에 물어보고 싶다고 생각했습니다. 나는 또한 ed와 관련되지 않은 모든 솔루션에 열려 있습니다. 이것이 유망한 접근 방식처럼 보인다고 생각합니다.
도움이 된다면 "프로그램"은 qstat
AWK가 사용자가 실행하고, 대기하고, 종료한 작업 수를 단순히 계산하고 마지막에 총계를 인쇄한다는 것입니다. 내가 원하는 기능을 내장한 qstat 옵션이 있을 수 있지만 아직 매뉴얼에서 찾지 못했기 때문에 이것도 유용한 답변이 될 것입니다! 내 명령 ed
에 어떤 문제가 있는지 정말로 알고 싶습니다.
답변1
당신은 실제로 그것을 우연히 발견했습니다.껍데기, 편집기가 아닙니다. 이것
echo -e "$-2,$m0\n,p\nQ"
큰따옴표로 묶여 있기 때문에 매개변수 확장을 의미하며 $-
이를 수행합니다. $m0
달려가서 echo "$-"
직접 확인해 보세요 echo "$m0"
. 쉘이 확장하지 않도록 작은따옴표로 묶어야 합니다.
이제 문제를 해결하고 있으니 우리도 마찬가지입니다.선호 printf
하다echo
. 후자는 구현 전반에 걸쳐 일관되지 않은 동작을 보이는 반면 전자는 건전합니다. 이렇게 해야 합니다:
printf '%s\n' '$-2,$m0' ',p' 'Q' | ed -s <(program | awk ...)
-s
ed에 "진단, 바이트 수 및 '!' 표시 억제" 옵션이 추가되었습니다. 이것은 순전히 장식적입니다.
샘플 실행(프로세스 교체를 시뮬레이션하기 위해 cat을 쓸데없이 사용함):
$ cat input
ATOM 126 CD GLN A 449 -2.853 11.592 119.709 1.00 17.95 C
ATOM 127 OE1 GLN A 449 -4.056 11.297 119.695 1.00 20.83 O
ATOM 128 NE2 GLN A 449 -1.948 10.876 120.359 1.00 14.98 N
HETATM 129 N MSE A 450 -4.523 16.830 119.280 1.00 14.88 N
HETATM 130 CA MSE A 450 -5.537 17.804 118.911 1.00 15.65 C
$ printf '%s\n' '$-2,$m0' ',p' 'Q' | ed -s <(cat input)
ATOM 128 NE2 GLN A 449 -1.948 10.876 120.359 1.00 14.98 N
HETATM 129 N MSE A 450 -4.523 16.830 119.280 1.00 14.88 N
HETATM 130 CA MSE A 450 -5.537 17.804 118.911 1.00 15.65 C
ATOM 126 CD GLN A 449 -2.853 11.592 119.709 1.00 17.95 C
ATOM 127 OE1 GLN A 449 -4.056 11.297 119.695 1.00 20.83 O