2016-10-03 16 views
1

私はtest.txtファイルを読んでいます。フォーマット:Bash:ファイルを1行ずつ読み込み、分割した行をコマンドライン引数として渡します。

79033d0135a21e45c60e283785f5914b 
dde8d97a40cd22667ccb3ca972197586 
4fd5ea73cd51db256384fb3333b0eb3d 

Iは、(例えば、行1:79 03 3D 01 35 A2 1E 45 C6 0E 28 37 85 F5 91 4B)のような線と分割することによって、このファイルの行を読んでい

bashスクリプト次のとおりです。

#!/bin/bash 
while IFS='' read -r line || [[ -n "$line" ]]; do 
    a="$line" | cut -c1-2 
    b="$line" | cut -c3-4 
    c="$line" | cut -c5-6 
    d="$line" | cut -c7-8 
    e="$line" | cut -c9-10 
    f="$line" | cut -c11-12 
    g="$line" | cut -c13-14 
    h="$line" | cut -c15-16 
    i="$line" | cut -c17-18 
    j="$line" | cut -c19-20 
    k="$line" | cut -c21-22 
    l="$line" | cut -c23-24 
    m="$line" | cut -c25-26 
    n="$line" | cut -c27-28 
    o="$line" | cut -c29-30 
    p="$line" | cut -c31-32 
    #./a.out "$a" "$b" "$c" "$d" "$e" "$f" "$g" "$h" "$i" "$j" "$k" "$l" "$m" "$n" "$o" "$p" 
    echo "$line" 
    echo "$a $b $c $d $e $f $g $h $i $j $k $l $m $n $o $p" 
done < test_10.txt 

今のところ、変数を印刷しようとしています。私はそれらをコマンドライン引数として後で私のC++プログラムに渡そうとしています。

問題は、私は変数を印刷できません。もちろん私のC++プログラムも引数を取ることができませんでした。

私は間違っていますか?

答えて

1

あなたはコマンド置換、$()、(ともecho)が必要:

a=$(echo "$line" | cut -c1-2) 

ここでコマンドecho "$line" | cut -c1-2のSTDOUTを変数aとして保存されます。

a=$(cut -c1-2 <<<"$line") 

今すぐいずれかの方法を選択し、他のすべてのための同じを適用します。

は、代わりに匿名のパイプを作成するには、変数の内容を渡すためにここに文字列、<<<を使用することができます。

+0

こんにちは、ありがとう! 2番目の解決策を教えてください。匿名のパイプラインが何を意味するのですか? – algoProg

+1

@algoProg '|'は匿名パイプと呼ばれ、必ず 'echo" $ line "| cut -c1-2'を実行すると、エコーが1つ余分に必要になり、 '<<<'のように2番目のパイプで必要とされないパイプがシェルによって内部的に処理されます。 – heemayl

+0

クリア!ありがとうございました! – algoProg

1

パイプが意図通りに機能するには、$lineの内容は、echoなど、stdinになる必要があります。

また、あなたは、それ以外の場合は、コマンド自体としてecho "$line" | cut -c1-2の出力を評価しようと、命令の結果に変数を設定する(後者が好ましい方法である)逆クォート又は$()command substitutionを使用する必要がありますおそらくcommand not foundエラーが表示されます。

たとえば、あなたの最初の割り当ては

a=$(echo "$line" | cut -c1-2) 

する必要があり、他は同様のパターンをたどります。

関連する問題