1

tmp1 と tmp2 なしでそれを行うにはどうすればよいですか? (情報ファイルは良いです)

      cat information_file1 | sed -e 's/\,/\ /g' >> tmp1
      echo Messi >> tmp2
      cat tmp1 | grep Ronaldo  | cut -d"=" -f2- >> tmp2
      rm tmp1
      cat information_file2 | fin_func tmp2
      rm tmp2

あなたの洞察のためのfin_func。

while read -a line; do

if [[ "`grep $line $1`" != "" ]]; then
echo 1
fi

done
4

2 に答える 2

1

これはうまくいくはずですが、かなりわかりにくいです:

cat information_file2 | fin_func <(cat <(echo Messi) <(cat information_file1 | \
  sed -e 's/\,/\ /g' | grep Ronaldo | cut -d"=" -f2-))

<( … )構文はBash のプロセス置換であり、ファイル/dev/fdファイル記述子の名前とその出力を返します。

于 2013-08-04T08:22:01.670 に答える
0

サンプルfin_funcは、コマンド引数として指定されたファイルを複数回読み取るため、その関数を変更することが許可されていない限り、少なくとも 1 つの一時ファイルが必要になります。質問で指定されたサンプルfin_funcは、ファイルを複数回読み取らないように簡単に変更できますが、これは実際のスクリプトではないことを示しているため、変更できないと想定し、ファイルを引数として取る必要があります。そうは言っても、私はあなたのスクリプトを次のように書きます:

trap 'rm -f $TMPFILE' 0  # in bash, just trapping on 0 will work for SIGINT, etc 
TMPFILE=$( mktemp ) 

{ echo Messi
tr , ' '  < information_file1 | 
awk -F= '/Ronaldo/{print $2}' ; } > $TMPFILE
< information_file2 fin_func $TMPFILE

fin_func入力として通常のファイルを必要としないように書き直すことができると強く思います。また、一致する行でのみ入力して処理を少し節約trできるため、必要はありませんが、それはおそらく些細な最適化です。ただし、代わりに使用することは審美的に必要です。gsubawktrsed

于 2013-08-04T14:20:59.967 に答える