![シフトラインの印刷と処理[閉じる]](https://linux33.com/image/163029/%E3%82%B7%E3%83%95%E3%83%88%E3%83%A9%E3%82%A4%E3%83%B3%E3%81%AE%E5%8D%B0%E5%88%B7%E3%81%A8%E5%87%A6%E7%90%86%5B%E9%96%89%E3%81%98%E3%82%8B%5D.png)
次の例に示すように、いくつかのコマンドの出力としてファイルと行があります。
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
$line
echo
LABEL
else
my_cmd
コンテンツを実行し、$line
次の行を1に設定してラベルを付け直します。LABEL
- この後の最後の文は、
done
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
奇数行を出力にコピーし、偶数行をコマンドとして処理して結果を印刷すると仮定すると、単純な(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拡張です。