2017-07-21 4 views
0

文字列を見つけようとしています。 Unixの分離ファイル。私は以下のサンプルファイルを持っています。 文字列を見つけ、unixの4番目のフィールドを更新します。

ROSE.2017|D|5:00 AM|||| 
YELLOW.2017|D|5:00 AM|||| 
BLUE.2017|D|5:00 AM|||| 

は、文字列 YELLOW.2017を検索し、見つけた場合、私は結果を下回るたい YES に対応するライン4番目のフィールドを更新します。

ROSE.2017|D|5:00 AM|||| 
YELLOW.2017|D|5:00 AM|YES||| 
BLUE.2017|D|5:00 AM|||| 

私は以下のコマンドを使用しており、間違った結果になっています。

fname=YELLOW.2017

間違った結果

nawk -F'|' '$1=="'$fname'"{$4="YES"}1' filename.txt > filename1.txt 

ROSE.2017|D|5:00 AM|||| 
YELLOW.2017 D 5:00 AM YES 
BLUE.2017|D|5:00 AM|||| 

私のUnixのバージョンを使用すると、レコードを編集した場合、それは再建取得し、フィールドセパレータは、出力フィールドで更新されますSunOSの5.10

+0

たぶん、あなたはそれがより一貫性に見えるように、あなたのテキストの書式を設定する必要があります。 –

答えて

1

です区切り記号(OFS)を設定する必要があります。

スクリプトに$fnameの値を取得する別の方法は、その値(-v fname="$fname")にawkの変数を設定することです:

$ fname="YELLOW.2017" 
$ awk -v fname="$fname" 'BEGIN{FS=OFS="|"} $1==fname{$4="YES"}1' file 
ROSE.2017|D|5:00 AM|||| 
YELLOW.2017|D|5:00 AM|YES||| 
BLUE.2017|D|5:00 AM|||| 
+0

ありがとうございました。今働いている。 – user8341893

関連する問題