おぼえがき

おぼえがき

bash サブシェルと名前つきパイプ

2007-05-01 | bash
こんなシェルを書いてた

MSG=""

awk ????? | head -50 |
while IFS=$'\t' read AAAA BBBB
do
  MSG="${MSG}${AAAA}|${BBBB}|"
  grep $BBBB ${ファイル} | awk 'BEGIN {FS="|";OFS="|"} {print $2,$3}' | sort | uniq |
  while IFS="|" read CCCC DDDDD
  do
    MSG=${MSG}${CCCC}|${DDDD}|"
  done
done

echo ${MSG}

ってな感じ。
MSGの中身は、何も入っていない・・・・
何でだ。。。

サブシェルが分かってないからこんなことではまる。

名前つきパイプで渡してやればいい。

while IFS=$'\t' read AAAA BBBB
do
  MSG="${MSG}${AAAA}|${BBBB}|"
  while IFS="|" read CCCC DDDDD
  do
    MSG=${MSG}${CCCC}|${DDDD}|"
  done < <(grep $BBBB ${ファイル} | awk 'BEGIN {FS="|";OFS="|"} {print $2,$3}' | sort | uniq )
done < <(awk ????? | head -50)

echo ${MSG}


ってやればできる。

んーーサブシェルが良く分からん・・・

ここをしっかり理解しないと・・・・
http://search.luky.org/linux-users.9/msg06102.html