2016-03-27 17 views
2

Bu .dat dosyasını.dat dosyasındaki belirli bir sütundaki değer nasıl değiştirilir | Bash

#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 
4194|Hồ Chí|Do|male|1988-10-14|2010-03-17T22:46:17.657+0000|103.10.89.118|Internet Explorer 
8333|Chen|Wang|female|1980-02-02|2010-03-15T10:21:43.365+0000|1.4.16.148|Internet Explorer 

var Ve ben id sütunu yeni value belirli bir column geçerli değerini değiştirmek ve belirtmek için bir id bir girişi, bir column ve value ile istediğiniz giriş için vermişti.

Örnek, komuta

myscript.sh -f datfile.dat --edit 933 3 patrikopoulos 

için benim dosya

#id|firstName|lastName|gender|birthday|creationDate|locationIP|browserUsed 
933|Mahinda|patrikopoulos|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 
4194|Hồ Chí|Do|male|1988-10-14|2010-03-17T22:46:17.657+0000|103.10.89.118|Internet Explorer 
8333|Chen|Wang|female|1980-02-02|2010-03-15T10:21:43.365+0000|1.4.16.148|Internet Explorer 

Buralarda yığını am olmak istiyorum:

if [ "$1" == "-f" ] && [ "$3" == "--edit" ] 
then 
id="$4" 
column="$5" 
value="$6" 
fi 

herhangi bir fikir?

+0

Kimlik değerini değiştiremiyorum ve sütun 2-8 olmalıdır. Kullanıcının verdiği kimlik yoksa, komut dosyası – user3583029

cevap

2

Bunun için awk kullanabilirsiniz:

awk -v id=933 -v c=3 -v val='patrikopoulos' 'BEGIN{FS=OFS="|"} $1==id{$c = val} 1' file 

Çıktı:

#id|firstName|lastName|gender|birthday|creationDate|locationIP|browserUsed 
933|Mahinda|patrikopoulos|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 
4194|Hồ Chí|Do|male|1988-10-14|2010-03-17T22:46:17.657+0000|103.10.89.118|Internet Explorer 
8333|Chen|Wang|female|1980-02-02|2010-03-15T10:21:43.365+0000|1.4.16.148|Internet Explorer 
+0

'u bitirmeli ve sütun parametrelerini kontrol etmek istiyorsam? Kimlik değerini değiştiremiyorum ve sütun 2-8 olmalıdır. Eğer kullanıcı verdiyse, o zaman betik – user3583029

+1

@ user3583029'u bitirmelidir. Ve herhangi bir kimliği değiştirmezseniz, giriş parametrelerinizi örnek değerler yerine kullanın: 'awk -v id =" $ 4 "-vc =" $ 5 "val = "$ 6" ... 'durumunuz için paketi –

+0

Evet ama dosyamı değiştirmiyor:/ – user3583029

1

sed olarak:

$ id=933; col=3; str="patrikipoulos" 
$ sed "/^$id|/s/[^|]*/$str/$col" file 
#id|firstName|lastName|gender|birthday|creationDate|locationIP|browserUsed 
933|Mahinda|patrikipoulos|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 
4194|Hồ Chí|Do|male|1988-10-14|2010-03-17T22:46:17.657+0000|103.10.89.118|Internet Explorer 
8333|Chen|Wang|female|1980-02-02|2010-03-15T10:21:43.365+0000|1.4.16.148|Internet Explorer 

933 ise ilk sayfasında bulunur, sonra 3 arama olmayanların meydana gelmesi -pipe karakterleri ve patrikopoulos ile değiştirin.