私はawkを使用して見つけるためにBashスクリプトを使用しています。(0010,0080)
awkは通常、括弧の間にカンマで区切られた数値を検索します。私が考えることができるすべての措置を講じましたが、テキストファイルに追加しても結果は得られません。私の正規表現は次のとおりです
awk '/\([0-9]{4},[0-9]{4}\)/' dcmResults.txt >> ~/export/"$1"/tagResults.txt
エスケープ文字を使用しないことを含め、角括弧でエスケープ文字を使用するほとんどすべてのバリエーションを実行しましたが、テキストファイルに追加すると結果はありません。誰かが私が間違っていることを教えてもらえますか?
更新すると、スクリプト全体は次のようになります。
#!/bin/bash
echo "Enter SUID: "
read uid
echo "Enter Tag Number: "
read dicomTag
dicomDump() {
arg1=$1
cd ~/export/"$1"
dcmdump *.dcm > ~/export/"$1"/dcmResults.txt
}
tagFinder() {
arg1=$1
arg2=$2
for i in $(cat ~/export/"$1"/dcmResults.txt); do
grep "$2" | awk '/[0-9]{4},[0-9]{4}.*/' dcmResults.txt >> ~/export/"$1"/tagResults.txt
break
done;
}
dicomDump "$uid"
tagFinder "$uid" "$dicomTag"
答え1
Gnu Awkは4.0で間隔式(ユーザー定義)を含め始めました{4}
。[0-9]
伝統的に、awkでは間隔式は提供されていません。 awkとegrepが互いに一貫性を持つようにするために、POSIX標準の一部として追加されました。
最初は、gawkが正規表現の間隔式と一致しませんでした。以前のプログラムでは、正規表現定数に「{」と「}」を使用できたためです。
しかし、バージョン4.0以降、gawkはデフォルトで間隔式と一致します。ほとんどのgawkユーザーにとっては、以前のプログラムとの互換性よりもPOSIXとの互換性が重要です。
正規表現定数に「{」と「}」を使用するプログラムでは、常にバックスラッシュを使用してエスケープするのが最善です。その後、awk.17のすべてのバージョンを使用すると、正規表現定数が有効で、望ましい方法で動作します。
バラより手動入力。
答え2
この行を見ると、2つの問題があると思います。
grep "$2" | awk '/[0-9]{4},[0-9]{4}.*/' dcmResults.txt >> ~/export/"$1"/tagResults.txt
次の操作を完了できます
grep
。grep -e "$2" -e '([0-9]\{4\},[0-9]\{4\})' dcmResults.txt >> ~/export/"$1"/tagResults.txt
- 入力はどこから
grep
来、出力はどこに行きますかgrep
?入力ファイル名があるのでawk
標準入力を無視します。