シフトラインの印刷と処理[閉じる]

シフトラインの印刷と処理[閉じる]

次の例に示すように、いくつかのコマンドの出力としてファイルと行があります。

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変数を定義します。
  • 次に、「一部のコマンドの出力」を含むファイルのすべての行を繰り返し、それを1行ずつ変数として読み込みますline
  • if変数はusingの内容をLABEL出力し、次の行を0に設定してコマンドパラメータとして表示します。1$lineechoLABEL
  • elsemy_cmdコンテンツを実行し、$line次の行を1に設定してラベルを付け直します。LABEL
  • この後の最後の文は、donebash に指定されたファイルから入力を取得するように指示します。

シェルプログラミングについてもっと知りたい場合は、以下を参照することをお勧めします。高度なバッシュスクリプトガイド

答え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

奇数行を出力にコピーし、偶数行をコマンドとして処理して結果を印刷すると仮定すると、単純な(1行)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拡張です。

関連情報