J'ai un fichier nommé myfile.csv
contenant les éléments suivants:
abc:123:myname:1231
def:423324:arbitrary:value:string
StackExchange:Unix:Linux
Depuis le terminal I Run ./myscript.sh def
Le contenu de myscript.sh
est:
#!/bin/bash
key_Word_I_am_looking_for=$1
my_variable=`cat myfile.csv | awk -F: -v keyword="$key_Word_I_am_looking_for" '( $1 == keyword )' END{print "$@" }'`
echo "$my_variable"
Je souhaite que le code recherche le mot def
ou tout autre mot dans le premier paramètre dans le myfile.csv
IE abc
ou StackExchange
. Une fois trouvé, j'aimerais que cela prenne toute la gamme sans les sépérateurs et la placerait dans le my_variable
variable et l'écho sur le terminal (donc la sortie ressemblerait à: def 423324 arbitrary value string
lorsque ./myscript.sh def
est entré sur le terminal. Lorsque ./myscript.sh StackExchange
la sortie serait StackExchange Unix Linux
).
Où est-ce que je vais mal? Y a-t-il une alternative?
Voici un sed
alternative:
sed -n '/^def:/s/:/ /gp' myfile.csv
Si vous passez la chaîne comme premier paramètre de position:
sed -n "/^$1:/s/:/ /gp" myfile.csv
À travers python.
$ python -c "import sys;
with open(sys.argv[2]) as f:
for line in f:
if sys.argv[1] == line.split(':')[0]:
print ' '.join(line.strip().split(':'))" def file
def 423324 arbitrary value string
Il suffit d'exécuter le script ci-dessus sur la borne avec le mot clé de recherche en tant qu'argument de FIRS et le nom du fichier en tant que deuxième argument.
Voici une solution utilisant Grep:
grep ^abc file | awk -F ":" '{print $1" " $2" " $3" " $4}'