10代と話して驚いたこと

2つのテキストファイルがあり、directorylist.txtから1行取り出し、filelist.txtから対応するファイルを抽出したいのですが
directorylist.txtに「/」があるため
「正規表現が終端されていません」というエラーがでます。
どのようにしたら、抽出できるのでしょうか?

while read LINE; do
awk ' $2 = '"$LINE"' { print $1 }' filelist.txt
done < directorylist.txt

●filelist.txt
[File名] [Directory名]
a.txt /home/hoge/
del.txt /home/hoge/
b.txt /home/foo/

●directorylist.txt
[Directory名]
/
/home
/home/hoge

A 回答 (1件)

文字列として比較するなら、文字列を"で囲みます。


$LINEのすぐ前後の"はシェルが取り外すので、' ' の中に " を書かないといけません。

while read LINE; do
awk ' $2 == "'"$LINE"'" { print $1 }' filelist.txt
done < directorylist.txt

別の案として、少し動作が違いますが、
fgrep -f directorylist.txt filelist.txt | awk '{print $1}'
    • good
    • 1
この回答へのお礼

ありがとうございます。
シングルコーテーションとエスケープで記述に戸惑いましたが

awk '$2 == '"\"$LINE"\"' { print $1 }' filelist.txt

でできました。

お礼日時:2009/04/08 09:20

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報