Avec cette commande:
cmd param | grep 'foo1\|foo5\|foo7'
Je reçois
foo1=bar1
foo5=bar5
foo7=bar7
comment puis-je écrire cette sortie dans un fichier csv?
en fin de compte, je voudrais exécuter la commande dans une boucle avec param change pour chaque boucle (d'où la sortie) afin qu'il soit utile si le fichier devient comme:
cat output.csv
foo1=bar1, foo5=bar5, foo7=bar7
foo1=value, foo5=value, foo7=value
Voici un autre one-liner:
echo $(cmd param | grep 'foo1\|foo5\|foo7') | sed 's/ /, /g' | tee -a output.csv
La commande: echo $(cmd param | grep 'foo1\|foo5\|foo7')
imprimera la sortie sous forme linéaire.
Cela met une virgule entre les variables: sed 's/ /, /g'
Ceci ajoute la sortie à une nouvelle ligne à la fin du fichier: tee -a output.csv
Cela fonctionnerait-il pour vous?
cmd param | grep 'foo1\|foo5\|foo7' | tr '\n' ',' | sed 's/,$//'
tr '\n' ','
remplace chaque retour de ligne par un ','sed 's/,$//'
supprime le dernier caractère s'il s'agit d'un ','Et si vous voulez le mettre dans un fichier csv, vous pouvez ajouter un '\ n' à la fin de la ligne, puis le rediriger vers un fichier csv:
cmd param | grep 'foo1\|foo5\|foo7' | tr '\n' ',' | sed 's/,\?$/\n/' >> file.csv
sed 's/,\?$/\n/'
Supprime le dernier caractère s'il s'agit d'un ',' et ajoute un '\ n'>>
est utilisé pour ajouter à la fin de votre fichier csv sans enlever ce qui est déjà à l'intérieurAvec Perl, vous pouvez obtenir le motif, le joindre et l’imprimer pour tous les fichiers souhaités:
Perl -0nE 'say join(",",/(foo\d+=\w+)/g)' ex* > out
Cela évitera votre boucle externe