0

awk によって次の出力が返されます。

qh1adm 20130711151154 : tp import all QH1 u6 -Dsourcesystems=BFI,EBJ
qh1adm 20130711151155 : tp import all QH1 u6 -Dsourcesystems=E7B,B17  
qh1adm 20130711151200 : tp import all QH1 u6 -Dsourcesystems=BFI,EBJ

レコード数をカウントするために、これを配列に格納したいと思います。複数の場合のみ、この配列の内容を表示したいと思います。お手伝いいただけますか?

どうもありがとう。

4

5 に答える 5

1

bash/zsh を使用して、出力をキャプチャし、行数を数えて、基準を満たしている場合は出力します。

output=$(awk 'something that returns what you showed in your question')
nlines=$(wc -l <<< "$output")
if ((nlines > 1)); then
    echo "$output"
fi
于 2013-07-13T12:31:30.097 に答える
0

将来誰かがこれを読んで、実際に複数行の awk 出力を bash 配列に取得する方法を考えている場合:

$ cat ./tst.sh
# ensure globbing is off and set IFS to a newline after saving original values
oSET="$-"; set -f; oIFS="$IFS"; IFS=$'\n'

array=( $(
    awk 'BEGIN{
        print "qh1adm 20130711151154 : tp import all QH1 u6 -Dsourcesystems=BFI,EBJ"
        print "qh1adm 20130711151155 : tp import all QH1 u6 -Dsourcesystems=E7B,B17"
        print "qh1adm 20130711151200 : tp import all QH1 u6 -Dsourcesystems=BFI,EBJ"
    }'
) )

# restore original IFS and globbing values
IFS="$oIFS"; set +f -"$oSET"

numElts="${#array[@]}"

if (( numElts > 1 ))
then
    for (( i=0; i < numElts; i++ ));
    do
        printf "array[%d]: %s\n" "$i" "${array[$i]}"
    done
fi
$
$ ./tst.sh tmp
array[0]: qh1adm 20130711151154 : tp import all QH1 u6 -Dsourcesystems=BFI,EBJ
array[1]: qh1adm 20130711151155 : tp import all QH1 u6 -Dsourcesystems=E7B,B17
array[2]: qh1adm 20130711151200 : tp import all QH1 u6 -Dsourcesystems=BFI,EBJ

しかし、明らかに、この場合、実際にはそのどれも必要なく、すべてを 1 つの awk コマンド内で実行する必要があります。

上記は、以下の @CharlesDuffy によって提起された問題に対処するために更新されました。

于 2013-07-14T14:30:34.460 に答える