2016-03-29 5 views
-1

ich versuche, mit dem folgende Formular werdenetwas in einem bestimmten Bereich einer splited Datei bash ersetzen shell

F1|F2|F3|F4|F5|F6|F7|F8 

Benutzer mir den Befehl geben, ein Feld einer Datei zuzugreifen:

. /tool.sh -f Datei --edit id Spalte Wert

tool.sh der Name des Codefile ist, id ist das erste Feld Spalte ist die Spalte, in der der Wert ersetzt werden muss Wert ist die Zeichenfolge, die ich ersetzen muss (F1) und ich muss die Datei suchen, wo id Übereinstimmungen und wenn ich die richtige Zeile finden müssen Sie zur rechten Spalte gehen (die vom Benutzer angegeben wird) und die F (Spalte) durch den Wert ersetzen. hier ist eine meiner Gedanken:

awk -v id="$4" -v column = "$5" -v value = "$6" -F"|" 
'BEGIN{OFS="|"} ($1 == id){$(column)=value;}' $2 

, wo ich die Werte in awk gesetzt wird und sie darin benutzen, aber ich bekomme

awk: cmd. line:1: fatal: cannot open file `=' for reading (No such file or directory) 

: Ich bin in Bash-Shell und Sie vielleicht große Fehler sehen

+0

./tool.sh -f Personen .txt --edit 933 2 stringtobelplaced – charles

Antwort

0

in bash Räume wichtig. Es sollte kein Leerzeichen zwischen = Zeichen in Ihren Variablendeklarationen sein. Ändern Sie ihn auf:

awk -F'|' -v id="$4" -v column="$5" -v value="$6" 'BEGIN{OFS=FS} $1==id{$column=value}' $2 
+0

Sie haben Recht ich korrigierte es aber ID ont erhalten das erwartete Ergebnis tha Datei bleibt gleich – charles

+0

Eingabedatei wird nicht geändert, überprüfen Sie die Ausgabe generiert. – karakfa

0

Dateiinhalt:

F1|F2|F3|F4|F5|F6|F7|F8 
G1|G2|G3|G4|G5|G6|G7|G8 
H1|H2|H3|H4|H5|H6|H7|H8 

Shell-Skript tool.sh:

#!/bin/sh 
params=$* 
file_to_use=`echo $params | sed -e "s/ -/\n-/g" | sed -n "s/^-f *\(.*\)/\1/p"` 
field_to_edit=`echo $params | sed -e "s/ -/\n-/g" | sed -n "s/^--edit *\(.*\)/\1/p"` 

if [ "$file_to_use" != "" ] && [ -f $file_to_use ] && [ "`echo $field_to_edit | grep -E "^[0-9]+$"`" != "" ]; then 
cat $file_to_use | cut -d"|" -f$field_to_edit 
else 
echo " Error of parameters" 
fi 

Test:

./tool.sh -f non_exist_file --edit 5 
Error of parameters 

./tool.sh -f file --edit x 
Error of parameters 

./tool.sh -f file --edit 6 
F6 
G6 
H6 
Verwandte Themen