私の状況は、クラスタ全体で拡張子が .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
最初の質問について:
あなたはできます組み合わせるfind
grep
。そして、あなたはまだすることができます複数の組み合わせgrep
。最初のものはgrep
何も印刷せず、-q
最後のものはもう一方が通過した後にのみファイルを印刷します。
これにより、次の2つの文字列を含むファイルのみが検索されます。
find . -type f -iname "*.xyz" \
-exec sh -c 'grep -qi CONFNAME "{}" && grep -li INPUTSQL "{}"' \;
詰まった場合は、2番目の質問に新しい質問をする価値があるかもしれません。役に立つかもしれませんawk
。