このコードがあり、通常のCLIで動作しますが、ファイルにどのように適用しますか?
sort <filename> | uniq | cut -f 1 -d "," | uniq -c |sed -e "s/^[ \t]*//"
常にコマンドが見つからないなどのメッセージが表示されます。
編集:私のコマンドはCLIで動作しますが、これをbashスクリプトに適用したいと思います。私の質問は、このコマンドをスクリプトにファイル名を$ 1として適用し、ファイルのように1行ずつ読み取ることができる別の変数に出力を保存する方法です。
だから私はこのbashコードと "./script.sh filename.txt"を使ってみました。
#!/bin/bash
lines=sort $1 | uniq | cut -f 1 -d "," | uniq -c |sed -e 's/^[ \t]*//'
実行すると、次のエラーが表示されます。
./filename.txt: line 1: YKL112W,YKL112W: command not found
答え1
問題は、スクリプトに構文エラーがあることです。ライン
lines=sort $1 | uniq | cut -f 1 -d "," | uniq -c |sed -e 's/^[ \t]*//'
方法:
sort
変数に文字列を割り当てるlines
$1
その後、出力をそれぞれuniq
、cut
およびにパイプしながら変数に格納されたコマンドが実行されます。uniq
sed
スクリプトに提供された引数には$1
ファイル名が含まれているため、シェルはファイルがテキストファイルであるにもかかわらずファイルを実行しようとする(つまりスクリプトのように)エラーメッセージが表示されます。
コマンドの結果を変数に割り当てるには、次のようにline
「コマンドの置き換え」を実行する必要があります。
lines="$(sort "$1" | uniq | cut -f 1 -d "," | uniq -c |sed -e 's/^[ \t]*//')"
私も使用することをお勧めします住宅検査シェルスクリプトに関する問題を識別します。