grepコマンドについて質問です。
grepコマンドでCSVファイルを参照し、ある項目に特定の文字列でないものがあれば、そのファイル名を取得する処理をしたいと思っています。
つまり、ある項目を$strとすると
$str <> 'aaaaaa'
という処理をgrepで行おうと考えています。
現状では、
grep -l '^[^,]*,[^,]*,[^,]*,[^,]*,[^,]*,[^,]*,[^(aaaaaa)]' ファイル名
等を試していますが、[^(aaaaaa)]だと一文字目しか判別できていないようです。[^a{6}]などもうまくいきません。
何かいい方法があれば教えて頂きたいと思います。
宜しくお願いします。
No.2ベストアンサー
- 回答日時:
コマンド一発でファイル名を取得する方法は思いつないので、とりあえずシェルを作ってみました。
下記シェルをファイルがあるディレクトリに置いて、検索文字列をパラメータにして実行してみてください。
シェル名:test.sh、検索文字列:aaaaa の場合
./test.sh aaaaaa
◎注意点
$7の部分はCSVファイルの何番目の項目かを表しているので実際の値に変えてください。
【CNT=`awk -F, '{print $7}'・・・・】
例:2番目の項目なら$7⇒$2
------------------------------------------------
#/bin/ksh
SHELLNM=$0
STRING=$1
ls | awk '{print $1}'| grep -v $SHELLNM | while read LIST
do
set -- `echo $LIST`
FILENAME=$1
CNT=`awk -F, '{print $7}' $FILENAME |grep $STRING|wc -l|awk '{print $1}'`
if (( $CNT != 0 ))
then
echo $FILENAME
fi
done
exit 0
返答が遅くなってしまい申し訳ありません。
ご回答ありがとうございます。
上記のシェルでうまく取得できているようです。
検索文字列にヒットしないものを抽出したいので、
if (( $CNT != 0 )) を if (( $CNT == 0 ))
としました。
シェルまで作成していただきありがとうございました。
No.4
- 回答日時:
[^なんとか] は何文字書こうが1文字にしかマッチしません。
7列目がaaaaaaばかりのファイルはリストせずに、それ以外のファイルをリストしたいということですよね。
grep -v -l '^[^,]*,[^,]*,[^,]*,[^,]*,[^,]*,[^,]*,aaaaaa' ファイル名…
awkを使うなら、
awk -F, '$7!="aaaaaa"{print FILENAME;nextfile}' ファイル名…
awkの種類によってはnextfileコマンドが無いかもしれません。man awk で確認ください。
ご回答ありがとうございます。
返信が遅くなり申し訳ございません。
grep -v -l '^[^,]*,[^,]*,[^,]*,[^,]*,[^,]*,[^,]*,aaaaaa' ファイル名…
ですが、このgrepですとCSV表記でならんでいることも否定して結果が出力されてしまっているようです。
正しい表記も現在も考察中です。
ご回答ありがとうございました。
No.3
- 回答日時:
いまいちよくわからないのですが,
・正規表がいらないならfgrep
・ファイルを根こそぎ検索して欲しいなら-rオプション
という感じで
$ fgrep -r "\$str <> 'aaaaaa'" .
とかではダメなんでしょうか?
ちなみにファイル名を入手する手っ取り早い方法はfindですね
$ find <dir> -name <name>
<dir>は任意の数のディレクトリを指定できます.<name>はワイルドカードが使えます(「"*foo*"」とか)
-nameをもっと複雑にしたいならgrepと混ぜる方法がありますね
$ find <dir> -print | grep <regex>
とか
ご回答ありがとうございます。
返信が遅くなってしまい、申し訳ありません。
今回の検索は、ファイルの中身を1つずつ調べて検索にヒットしたファイル名を抽出したいのでfindは利用できないかなと思います。
ファイルの中身がCSVなので単純に"\$str <> 'aaaaaa'"としてしまうと他の項目も見られてしまうので、対応に困っていました。
ご回答ありがとうございました。
No.1
- 回答日時:
該当項目を抜き出してからgrepではいけないのでしょうか? awkを使うと指定項目だけを抜き出せます。
↓7項目目を抜き出す
awk -F, '{print $7}' ファイル名
この回答への補足
ご回答ありがとうございます。
grep検索の例で、ファイル名と書いたのが間違いでした。
正確には「ファイルパス」です。
あるディレクトリ内に大量のファイルがあり、そこから該当のファイルを短時間で検索したかったため、grepコマンドを利用しようと考えました。
awkコマンドを知らなかったので調べてみましたが、awkコマンドでファイル名を抽出することは可能なのでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- UNIX・Linux bashでブランク(空白)を検索文字列として指定する方法 1 2022/04/13 22:29
- フリーソフト grep検索では 1 2022/11/01 19:26
- UNIX・Linux bashスクリプトのgrepで3XXの検索の仕方について 2 2022/09/06 21:35
- システム CSVファイルのマッピング処理の省力化 1 2022/11/24 00:01
- フリーソフト サクラエディタの正規表現(grep機能)の使い方 3 2022/06/22 10:29
- Access(アクセス) CSVファイルの「0落ち」にVBA 6 2023/02/02 15:27
- その他(プログラミング・Web制作) bashのgrepで複数の検索、かつスクリプト内で改行する方法を教えてください。 1 2022/10/06 20:09
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- UNIX・Linux AWSのEC2のZabbixユーザーでawscliコマンドが実行できない状態を解決する 1 2022/12/06 22:17
- UNIX・Linux テキストファイルをページ番号付きでコマンドラインから印刷したい 1 2023/02/22 12:47
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Windows Media Playerを開くと...
-
Windows11のデスクトップのアプ...
-
エクスプローラのアクティブウ...
-
windows11におけるファイルの並...
-
windows11でクイックスキャン等...
-
Windows11 システム通知音がも...
-
アイコンに、四角い枠が出来て...
-
「Wi-Fiアダプターへのアクセス...
-
MS-DOS 6.22のダウンロード
-
Windowsで大量の画像サイズを半...
-
Ubuntuに仮想環境いれて古いwin...
-
Microsoftのページだけ全て「申...
-
VirtualBoxのゲストOS起動時にU...
-
Raspberry Pi 3 A+ ブラウザ遅い
-
勝手に無変換になる
-
Windows Mac Linux で共用可能...
-
Windows11です。タスクバーの時...
-
「ウインドウズアップデートの...
-
OPPOのRENOシリーズのOSのアプ...
-
フォルダロック
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
windows11でクイックスキャン等...
-
エクスプローラのアクティブウ...
-
クロムOSについて教えてください
-
Windows Media Playerを開くと...
-
windows11 きれいなロック画面...
-
Windows11の右クリックメニュー...
-
Windows11のデスクトップのアプ...
-
windows11におけるファイルの並...
-
「Wi-Fiアダプターへのアクセス...
-
Windows11 システム通知音がも...
-
Windowsの古いゲーム(32bit OS...
-
windows10DVDからインストール...
-
アイコンに、四角い枠が出来て...
-
有料Microsoft365は、PCを変え...
-
Mac用の外付けHDはWindowsPCで...
-
コマンドプロンプト tree
-
Win + G でCPU使用率が表示され...
-
Windows11 ゴミ箱 ファイルの取...
-
Windowsアップデートしたらタス...
-
MS-DOS 6.22のダウンロード
おすすめ情報