교대 라인 인쇄 및 처리 [닫기]

교대 라인 인쇄 및 처리 [닫기]

다음 예제와 같이 일부 명령의 출력으로 파일과 줄이 있습니다.

kk 
25
bb
34
cc
56
dd
67

나는 이와 같은 bash 출력을 원한다

echo "kk" #(line 1)

25 #(라인 2)에서 일부 명령을 실행합니다.

echo "bb"  #(line 3)

34 #(4번째 줄)에서 일부 명령을 실행하는 등...

답변1

항상 가정같은 명령(라고 부르자 ) 파일의 짝수 라인 내용을 my_cmd수행하고 싶다면 다음 스크립트가 작동해야 합니다.previous_output.txt

#!/bin/bash

LABEL=1

while read line
do
  if (( LABEL == 1 ))
  then
    echo "$line"
    LABEL=0
  else
    my_cmd "$line"
    LABEL=1
  fi
done < previous_output.txt

설명하다:

  • 첫 번째 줄은 bash를 사용하여 해석하는지 확인하는 것입니다.
  • 그런 다음 "에코"하려는 행에 대해 값이 1인 LABEL 변수를 정의합니다.
  • 다음으로, "일부 명령의 출력"을 포함하는 파일의 모든 행을 반복하고 이를 한 줄씩 변수로 읽습니다 line.
  • if우리 변수 는 using의 내용을 LABEL출력 하고 다음 줄을 0으로 설정하여 명령 매개 변수로 표시합니다.1$lineechoLABEL
  • elsemy_cmd콘텐츠를 실행 하고 $line다음 줄을 1로 설정하여 다시 레이블로 표시합니다.LABEL
  • 이 뒤의 마지막 명령문은 donebash에게 지정된 파일에서 입력을 얻도록 지시합니다.

쉘 프로그래밍에 대해 더 알고 싶으면 다음을 참조하는 것이 좋습니다.고급 Bash 스크립팅 가이드.

답변2

내가 올바르게 이해했다면:

sed -Ee '1~2s/^(.*)/echo \1/' -Ee 's/^([0-9]{2})/command \1/' file

산출:

echo kk 
command 25
echo bb
command 34
echo cc
command 56
echo dd
command 67

답변3

홀수 행을 출력에 복사하고 짝수 행을 명령으로 처리하여 결과를 인쇄한다고 가정하면 간단한(한 줄) GNU sed 프로그램을 사용할 수 있습니다.

#!/bin/sed -f

0~2s!.*!dc -e '& 2*p'!e

여기서는 "Command"를 간단한 숫자 double로 설정했지만 여기서 원하는 것은 무엇이든 할 수 있습니다.

이것이 나에게 제공하는 결과입니다.

kk 
50
bb
68
cc
112
dd
134

"단계" 주소 지정과 /e"실행" 플래그 는 모두 s표준 sed에서 제공되지 않는 GNU 확장입니다.

관련 정보