特定の形式のファイルから特定の情報を印刷しようとしています(ファイルは次のとおりです:id|lastName|firstName|gender|birthday|creationDate|locationIP|browserUsed
) 。 が、私は特にスクリプトを呼び出すときにこれらの引数を使用する(のがscript.shそれを呼びましょう):次のファイルについては、例えばシェルのファイルから特定の部分を印刷する
--firstnames)
OlIFS=$IFS
content=$(cat "$3" | grep -v "#")
content=$(cat "$3" | tr -d " ") #cut -d " " -f6)
for i in $content
do
IFS="|"
first=($i)
echo ${first[2]}
IFS=$OlIFS
done | sort | uniq
;;
esac
:これまで
./script.sh --firstnames -f <file>
私のコードは次のとおりです:
#id|lastName|firstName|gender|birthday|creationDate|locationIP|browserUsed
933|Perera|Mahinda|male|1989-12-03|2010-03-17T13:32:10.447+0000|192.248.2.12|Firefox
1129|Lepland|Carmen|female|1984-02-18|2010-02-28T04:39:58:781+0000|81.25.252.111|Internet Explorer
は出力を持つようになっている:
Carmen
Mahinda
私が気づいた問題の1つは、スクリプトがコメントも印刷することです。上記は "#"で始まる行を取り除くためにgrepを使用していますが、
Carmen
firstnames
Mahinda
でも印刷されます。 これはコードの一部に過ぎません(私は問題だと思っています)。それは " - ファーストネーム"を認識することになっています。ファイルのいくつかのフィールドには、最後のセクション(ブラウザセクション)にスペースが含まれているので、そのセクションだけを削除したかったのです。 これは学校プロジェクトのためのものであり、このセクションの成績を示すプログラムによれば、それはすべて間違っています。スクリプトは私が(私はそれをテストした)私が知る限りで動作します。私は何が間違っているのか分からないので、私は何を修正するのか分からない。助けてください !
サンプルファイルの内容と出力方法を教えてください。見た目では、単純な 'Awk'を' awk 'BEGIN {FS = OFS = "|"}として実行できます!一意[$ 3] ++ inputFile'' – Inian
'grep -vE '^#' inputFile |カット-d '|' -f3'で十分であるはずですが、同時に2つの異なる方法で処理しようとしているようです(grep/tr/cutで処理するIFS +外部ツールを使用したbashネイティブの文字列処理) – Aaron
あなたの特定の質問"なぜあなたの出力にファーストネームが残っているのですか?"という問題は、ファイルの内容( 'cat" $ 3 "')からもう一度始めた次の行で 'grep -v'の結果が上書きされてしまうことです - >あなたのgrep(コメント行を削除するはずだった)の効果は無視されました – Aaron