2016-09-23 5 views
0

ここでは、grep -v '^--'grep -A 1を使って私ができることを知っていますが、代わりにawkを使う必要があるかもしれません。文字列と出力行が一致していないプロセス行

私はこのようになり、データいます

Random text line 1 
--Data1 
Random text line 2 
--Data2 
Random text line 3 
--Data3 
Random text line 4 
--Data4 
Random text line 5 
--Data5 

事があるが、私はコマンドを実行する必要があります - 「 - 」のは始まらないすべての行にcommand1それを呼ぼうと一緒に出力をキャプチャその下の線。

だから私は組み合わせたい三つのコマンドは以下のとおりです。

grep -v '^--' file.txt | command1 > text-output

grep -A 1 [not sure] > --data-below-text

私はおそらくコマンドのwhile read line; do種類に保存する変数によってこれを行い、その後、変数を格納し、エコーができます。ただし、以下を得るために、より効率的な方法で簡単な方法があるかもしれないように私は感じる:もちろん

Random text line 1, text-output, --Data1 
Random text line 2, text-output, --Data2 
Random text line 3, text-output, --Data3 
Random text line 4, text-output, --Data4 
Random text line 5, text-output, --Data5 

、変数を使用することが唯一の方法であれば、私もそれを行うに開いています。私は道を並行してコードを使用することを決定した場合、変数が厄介になることがあることを知っているので、私はちょうど確かめたいと思っていました。どんな方向にも大変感謝しています。

+0

1行ごとに個別に、または全体としてcommand1を実行する必要がありますか? –

+0

' - 'で始まらない行、言い換えればすべてのランダムテキスト行のみ。私はランダムなテキスト行を処理し、その下の出力と 'データ'行をキャプチャする必要があるため、ちょっと難しいです: -/ – DomainsFeatured

答えて

1

こちらの方法だ:

command_wrapper(){ 
    in=$(cat -) 
    one=$(echo "$in" | head -n1) 
    two=$(echo "$in" | tail -n1) 
    result=$(echo "$one" | command1) 
    echo "$one, $result, $two" 
} 

grep -A1 -v '^--' file.txt | command_wrapper 

は、ここにもう一つの方法です。ここで

textlines=$(grep -v '^--' file.txt) 
results=$(echo "$textlines" | command1) 
datalines=$(grep '^--' file.txt) 
paste <(echo "$textlines") <(echo "$results") <(echo "$datalines") | 
    tr '\t' ',' > output.txt 
+1

Hey Webb、もう一つは私のために働きます。変数に二重引用符を追加しました。私は変数なしでそれをする方法がなかったと思う。助けてくれてありがとう。私は自分のペーストを考えなかったでしょう。もしあなたが1秒間お待ちください。 – DomainsFeatured

0

はあなたが後にしている何をすべきawkでの方法です。..

$ cat yourcommand 
echo "printing : [email protected]" 

:~/test/awk$ awk '!/^--/ { cmd = "./yourcommand "$0 ; cmd | getline outvar ; print outvar } /^--/ { print }' 1 
printing : Random text line 1 
--Data1 
printing : Random text line 2 
--Data2 
printing : Random text line 3 
--Data3 
printing : Random text line 4 
--Data4 
printing : Random text line 5 
--Data5 

我々が一致すべての行は - で始まり、その行の出力を './yourcommand'に渡します - 私の場合は、単に 'printing:'の前にt彼の行は - しかし、あなたは自分の入力コマンドで置き換えることができるはずです。

awks getlineは出力をoutvarに格納し、出力します。 - で始まる行は通常どおりに印刷されます。

編集:getlineは次の行だけを取得します。あなたが抽出する行が増えたら、残りの部分を与えることができるはずです。

+0

ちょっとLineDash、これは私のために働いていません。出力としてコマンドを読み込もうとすると、構文エラーが表示されます。 – DomainsFeatured

+0

あなたはあなたが得ている出力とあなたが実行しているコマンドを正確に教えてもらえますか? – linedash

関連する問題