2

次のスクリプトがあります。

#!/bin/csh
echo "jones 2143 78 84 77" >! student-marks
echo "Gondrol 2243 88 94 87" >> student-marks

awk '{
if ($3 >=35 && $4 >= 35 && $5 >= 35)
    print $0,"=>","Pass";
else
    print $0,"=>","Fail";
}' student-marks

URL http://www.thegeekstuff.com/2010/02/awk-conditional-statements/から直接コピーしました

awk で if else ロジックを使用する方法を学習する例として。残念ながら、Unmatched というエラーが表示され続けます。アドバイスはありますか?

4

2 に答える 2

2

DigitalRossは、csh が複数行の引用符付き文字列を POSIX シェルとは異なる方法で処理すること、およびshorを使用bashする方が簡単である可能性が高いことは正しいです。 一般に、スクリプティングには適していないと考えられています (ただし、インタラクティブな使用のために、特にそのバリアントでcshそれを好む人もいます)。tcsh

スクリプト作成に使用する際の問題については、「有害と見なされる Csh プログラミング」を参照してください。csh

しかし、csh を使用してやりたいことを行うことは可能です。複数行の引用符で囲まれた文字列内の各行の末尾にバックスラッシュを追加するだけです。

#!/bin/csh -f
echo "jones 2143 78 84 77" >! student-marks
echo "Gondrol 2243 88 94 87" >> student-marks

awk '{\
if ($3 >=35 && $4 >= 35 && $5 >= 35)\
    print $0,"=>","Pass";\
else\
    print $0,"=>","Fail";\
}' student-marks

出力:

jones 2143 78 84 77 => Pass
Gondrol 2243 88 94 87 => Pass

もう 1 つ小さな変更を加えました。行に-fオプションを追加することです。#!これにより、リソース ファイルやスタートアップ ファイルが読み込まれなくなり、スクリプトは (a) 起動が少し速くなり、(b) 独自のファイルやファイルcshへの偶発的な依存関係が回避されます。(これはスクリプトには当てはまりません。これらのシェルでは、オプションの意味はまったく異なります。).cshrc.loginshbash-f

于 2012-12-13T00:59:37.690 に答える
2

またはに変更cshします。shbash

#!/bin/sh
...

Csh は、複数行の引用符で囲まれた文字列を Posix シェルと同じ方法で処理しません。

于 2012-12-13T00:47:14.020 に答える