シェルスクリプトでCLIコマンドを使用する[閉じる]

シェルスクリプトでCLIコマンドを使用する[閉じる]

このコードがあり、通常の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その後、出力をそれぞれuniqcutおよびにパイプしながら変数に格納されたコマンドが実行されます。uniqsed

スクリプトに提供された引数には$1ファイル名が含まれているため、シェルはファイルがテキストファイルであるにもかかわらずファイルを実行しようとする(つまりスクリプトのように)エラーメッセージが表示されます。

コマンドの結果を変数に割り当てるには、次のようにline「コマンドの置き換え」を実行する必要があります。

lines="$(sort "$1" | uniq | cut -f 1 -d "," | uniq -c |sed -e 's/^[ \t]*//')"

私も使用することをお勧めします住宅検査シェルスクリプトに関する問題を識別します。

関連情報