2016-03-23 18 views
0

私はこのフォーマットAwkのシェルスクリプト

#id|firstName|lastName|gender|birthday|creationDate|locationIP|browserUsed 
933|Mahinda|Perera|male|1989-12-03|2010-03-17T13:32:10.447+0000|192.248.2.123|Firefox 
1129|Carmen|Lepland|female|1984-02-18|2010-02-28T04:39:58.781+0000|81.25.252.111|Internet Explorer 

と.datファイルを持っていると私は値がから与えられている(値(列の数がコマンド./tool.sh -f <file> --edit <id> <column> <value>でユーザから与えられた)列を置換します同じコマンドを持つユーザー)私は、ユーザーが、このコマンドに

を与えるとき、私はこのような何かをしたいのawk

#!/bin/bash 
if [ "$1"="-f" ] ; then 
    if [ "$3"="--edit" ] ; then 

y=$6 
x="$"$5 
awk -F '|' ' '$4'==$1{$x-=$y;print }' <$2 

fi 
fi 

<column>パラメータを挿入することはできません3210

(以前よりも3番目のフィールドはspyros」に値「ペレラ」の変化を持っている)

933|Mahinda|spyros|male|1989-12-03|2010-03-17T13:32:10.447+0000|192.248.2.123|Firefox 
+1

あなたのawkスクリプトが何をすべきかは非常に不明です。 awkの構文とawkのフィールドをシェルの位置パラメータや変数でシェル構文と混在させているようです。そしてあなたがなぜあなたの記述を与えられているのかを、 ' - ='を持っているのはなぜですか?あなたの質問を編集して、より良い説明、実行したい操作の例、投稿されたサンプル入力の期待される出力を提供してください。 –

+0

スクリプトのサンプル呼び出しを見せてください。たとえば、 './tool.sh -f --edit'について議論すると' --edit'が '$ 2'になりますが、' $ 3'でテストします。 '$ 2'からリダイレクトしたように見えるので、' ./tool.sh -f filename --edit ... 'を意味すると思われますが、引数4,5,6で期待することは完全には明らかではありません。おそらくシェルから 'awk'に値を伝えるために' -v'を使うでしょう。 –

+0

私の質問を期待される出力で編集する –

答えて

2

それはあなたがこの希望のようになります@エド・モートンとして

awk -v key="$4" -v fldNr="$5" -v val="$6" 'BEGIN{FS=OFS="|"} $1==key{$fldNr=val;print}' "$2" 
0

を、私

awk -v id=933 -v field=lastName -v value=spyros \ 
'BEGIN{OFS=FS="|"} NR==1 {for (i=1; i<=NF; i++) a[$i]=i; print} NR>1 {if($a["#id"]==id) $a[field]=value; print}' \ 
file 
関連する問題