2016-05-28 5 views
0

短い話ですが、変数を使用してテキストファイルの最初の列に含まれる値をgrepしようとしています。テキストと別の変数を組み合わせて変数を作成する

ここでは動作しませんgrepコマンドで、スクリプトのサンプルです:list.txtにの

for ii in `cat list.txt` 
do 
    grep '^$ii' >outfile.txt 
done 

内容:

123,"first product",description,20.456789 
456,"second product",description,30.123456 
789,"third product",description,40.123456 

私はgrep '^123' list.txtを実行した場合、それが正しいを生成output ... list.txtの最初の行です。

変数(つまりgrep '^ii' list.txt)を使用しようとすると、「^ iiコマンドが見つかりません」というエラーが表示されます。

VAR1= "'^"$ii"'" 

しかし VAR1変数が $ii変数の後に改行を含んでいた::私はそれを動作させるために、変数とテキストを組み合わせてみました

'^123 
' 

私は物事の洗濯物のリストを試してみましたcr/lr(つまりsed & awk)を削除しますが、使用することはできません。変数を使ってgrepコマンドを実行する方が簡単です。私はそれを手動で実行するときに完全に動作するので、grepコマンドにとどまることを好みます。

+1

を書いた(http://stackoverflow.com/editing-help)。 – Cyrus

+3

また、希望の出力を表示します。 – John1024

+0

返信いただきありがとうございます!この場合、目的の出力はファイルの最初の行にすぎません。基本的には、grepが最初の列を検索し、残りの列を無視するようにします。フラグなしでgrepを使用すると、ファイルの各行が表示されます。 –

答えて

1

コマンドgrep '^ii' list.txtで混乱していることがあります。文字^は行の先頭を表し、$は変数の値を表します。 あなたは、行の先頭で変数IIに123をgrep良い習慣を学習するための

ii="123" 
grep "^$ii" list.txt 

(あなたがここでは二重引用符を使用する必要があります)
良い瞬間を使いたい:小文字で変数名に続けて(よくやった)と中括弧を使用します(害はありませんし、他のケースで必要とされる):

ii="123" 
grep "^${ii}" list.txt 

を今、私たちの両方が何かを忘れている:私たちのgrep 1234,"4-digit product",description,11.1111と一致します。 grepの中,を含める:

ii="123" 
grep "^${ii}," list.txt 

そして、どのようにエラーが見つかりません「^ IIコマンド」を手に入れましたか?私はあなたがバッククォートを使用したと思われる(コマンドを入れ子にするために、古い道を、より良いがecho "example: $(date)"です)、あなたは、[編集ヘルプ]をご覧ください

grep `^ii` list.txt # wrong ! 
+0

ウォルターありがとう、そのトリックでした!あなたの応答に加えて、Windowsで生成されたので、私はlist2.xtファイルでdos2unixを実行する必要があることを発見しました。返信した皆さん、ありがとう! –

0
#!/bin/sh 
# Read every character before the first comma into the variable ii. 
while IFS=, read ii rest; do 
    # Echo the value of ii. If these values are what you want, you're done; no 
    # need for grep. 
    echo "ii = $ii" 
    # If you want to find something associated with these values in another 
    # file, however, you can grep the file for the values. Use double quotes so 
    # that the value of $ii is substituted in the argument to grep. 
    grep "^$ii" some_other_file.txt >outfile.txt 
done <list.txt 
関連する問題