출력에서 |를 사용하여 결합된 출력(파이프라인)을 얻는 방법

출력에서 |를 사용하여 결합된 출력(파이프라인)을 얻는 방법

A.txt라는 파일이 있고 B.txt 파일을 생성하여 옆에 파이프 기호가 있는 텍스트를 처음에 쓰고 그 뒤에 파일 A의 줄 수가 표시되도록 해야 합니다(여기에는 10줄이 있습니다). 예 ), A 파일의 내용입니다.

참고: 이 작업은 한 줄 명령으로 최대한 쉽게 수행해야 합니다.

산출:

Some text | 10
(Contents of file A)

파이프 기호 없이 이것을 시도했지만 작동하지 않았습니다.

(echo 'Some Text'; 
sed -i 1,10d A.txt ; 
wc -l A.txt ;cat A.txt) 
>> B.txt

답변1

sed -i 1,10d A.txtA.txt에서 1~10행 삭제그러나 아무것도 인쇄되지 않습니다. cat파일에 대한 후속 호출(동일한 하위 쉘 내에서도)은 인쇄됩니다.수정됨원본 내용이 아닌 파일 내용입니다.

답변2

에 10개의 행만 있고 를 A.txt사용하여 해당 행을 삭제하면 sed다음은 cat A.txt출력되지 않고 wc0개의 행이 보고됩니다.

아마도 다음과 같은 것을 원할 것입니다.

(
echo "Some text | $(wc -l < A.txt)"
cat A.txt
) > B.txt

답변3

lines=$( wc -l A.txt ) ; printf "Some Text | %s\n" ${lines%% *} > B.txt ; cat A.txt  >> B.txt
  1. 의 출력에는 wc파일 이름이 포함되어 있으므로 이를 제거해야 합니다. 이 작업은 셸의 기본 접미사 제거 기능을 사용하여 수행됩니다 ${var%%glob}.

  2. 어떤 경우에는 오작동할 수 있으므로 개인적 printf으로 기본적으로 사용하는 것을 선호합니다 .echoecho

  3. 두 번의 출력 리디렉션을 수행하면 출력 파일에 이전 코드 한 줄 실행의 데이터가 포함되지 않습니다. 첫 번째 리디렉션은 >이전 버전을 덮어씁니다.

관련 정보