拡張子が .xyz のファイルを検索しますが、2 つの用語が見つかった場合にのみレコードを返します。

拡張子が .xyz のファイルを検索しますが、2 つの用語が見つかった場合にのみレコードを返します。

私の状況は、クラスタ全体で拡張子が .xyz と sed/grep/awk/? のファイルを検索する必要があることです。 off 2 つの固有値「CONFNAME」と「INPUTSQL」を含むレコードのみが含まれます。

質問:
1. この情報を返すには、正しいパイプラインを構築してください。
2. これら2つの値の間の50行のガベージ行を削除し、2つの列を持つcsvにフォーマットします。

サンプルファイル:

1_TOD_DO_ON.x
1  !prototype|P|||${AIDQ_MP}/dA_lookIP.mp
2  CONFNAME|$|||ITEST_New_Deal
...
...
50 INPUTSQL||||Select \n 'ITOD|L1235'

これらの.zyzファイルに必要な2つのデータは次のとおりです。ITEST_NEW_TRANSACTIONそしてITOD | L1235(カンマ区切り).

質問1で試したいくつかのこと

cd To_Correct_Search_Path

ㅏ。

find . -type f -iname "*.xyz" -exec egrep -i CONFNAME --color=auto --with-filename {} \; 

// 1つの値だけが見つかりました。

雨。

find . -type f \( -iname "*.xyz" -o -name "CONFNAME" -o -name "INPUTSQL" \) -exec sh -c 'echo "$0"' {} \; >

// "INPUT_SQL"の場合、最後の値のみを探します。

氏。

find . -type f -iname "*.pset" -exec egrep -i CONFNAME egrep -i INPUTSQL --color=auto --with-filename {} \; 

//最後の値のみを探します。

質問2の場合

to値間のゴミを除去するために、2つの異なる値を閉じたいと思います。ただし、検索から返された情報にこれらの値が含まれます。。ここにいくつかのアイデアがありますが、まず問題1を解決する必要があります。オファーは絶対に歓迎されています!

ベストアンサー1

最初の質問について:

あなたはできます組み合わせるfindgrep。そして、あなたはまだすることができます複数の組み合わせgrep。最初のものはgrep何も印刷せず、-q最後のものはもう一方が通過した後にのみファイルを印刷します。

これにより、次の2つの文字列を含むファイルのみが検索されます。

find . -type f -iname "*.xyz" \
  -exec sh -c 'grep -qi CONFNAME "{}" && grep -li INPUTSQL "{}"' \;

詰まった場合は、2番目の質問に新しい質問をする価値があるかもしれません。役に立つかもしれませんawk

おすすめ記事