Basierend auf Lösungen unten kam ich damit bis zu entweder -q oder -a als Option zu akzeptieren, die beide mit dem Argumente:Shell-Skript mit Optionen und Argumente - Update
> #!/bin/bash
>
> input_file="${1:-/dev/stdin}"
>
> while getopts ":qa:" opt; do case $opt in
>
> q)
> string="$OPTARG"
> echo "org = $string"
> grep -v '^>' "$input_file" | grep -x '.\{15,30\}' | sort | uniq -c | awk '{print $2, $1}' | perl -lane ' print ">dme" . $n++ . "_count=$F[1]\n$F[0]" if ($F[1] > 2) '
> ;;
>
> a)
> string="$OPTARG"
> echo "org = $string"
> grep -v '^>' "$input_file" | grep -x '.\{15,30\}' | sort | uniq -c | awk '{print $2, $1}' | perl -lane ' print ">dme" . $n++ . "_count=$F[1]\n$F[0]" if ($F[1] > 2) '
> ;;
>
> \?)
> echo "Invalid option: -$OPTARG" >&2
> exit 1
> ;;
> :)
> echo "Option -$OPTARG requires an argument." >&2
> exit 1
> ;; esac done
./script.sh -q "hsa" < test.txt > trial.txt
Wie geraten, ich nahm Option -m. Derzeit habe ich die gleichen Anweisungen für die Optionen q und m, nur für Testzwecke. Option a funktioniert und bringt das gewünschte Ergebnis. Die Option q gibt keinen Fehler aus, liefert aber nicht das gleiche Ergebnis.
Auch würde ich gerne das Argument von der Befehlszeile an die Perl-Anweisungen übergeben, d. H. Ich möchte dme mit dem ersetzt werden, was von der Befehlszeile bereitgestellt wird. Gibt es eine Möglichkeit, dies zu tun? Wie es jetzt ist, läuft die Perl-Linie gut.
Danke!
'./help.sh
sarbbottam
@sarbbottam: Pipes und Filter - viele Programme in einem Unix-like OS liest von stdin und schreibt in stdout –
'