Vraag Schrijven bash-script dat input van pijp neemt


Ik ben altijd bezig dingen als dit te typen:

cat some_list_of_elements.txt | awk '{print "\047"$1"\047"}' | paste -d, -s

Het neemt een lijst met items uit een bestand, wikkelt elk tussen aanhalingstekens en voegt ze samen in een door komma's gescheiden lijst.

In plaats van dat soort dingen uit te typen, zou ik zoiets als dit willen doen:

cat some_list_of_elements.txt | csl

Hoe kan csl worden geïmplementeerd in bash? Is er een manier om het als een alias te doen?


2
2017-08-09 21:17


oorsprong




antwoorden:


alias csl="awk '{print "\047"$1"\047"}' | paste -d, -s"

dan gewoon cat whatever | csl

Dit lijkt te werken, maar echt niet, om de redenen die in de onderstaande opmerkingen worden genoemd. Zie ze voor echte, goed werkende oplossingen :)

Trouwens, dit is niet ubuntu-specifiek, dus voel je vrij om te posten op stackoverflow.com als mijn antwoord niet werkt voor jou.


3
2017-08-09 21:23



Werkt niet voor mij. Met de opdracht awk wordt "20007" voor elke regel uitgevoerd. - frankadelic
Dit werkt.... alias csl='awk '\''{print "\047"$1"\047"}'\'' | paste -d, -s' - frankadelic
@frankadelic, je zou ook een functie kunnen gebruiken: csl() { awk '{print "\047" $1 "\047"}' - | paste -d, -s; } - hoef niet te rotzooien met veel offertes en backslashes. Ik heb het argument expliciet gesteld - voor awk om aan te geven dat het van stdin leest. - glenn jackman
@roadmr, de moeilijkheid is dat je dubbele aanhalingstekens gebruikt als de "buitenste" aanhalingstekens, dus de $1 wordt vervangen op het moment dat je bent definiëren het alias. - glenn jackman


Dit werkte voor mij:

alias csl='awk '\''{print "\047"$1"\047"}'\'' | paste -d, -s'

Bedankt aan @roadmr voor het wijzen van mij in de goede richting.


0
2017-08-14 20:55