大規模ファイルセットから特定のテキスト行を抽出する

大規模ファイルセットから特定のテキスト行を抽出する

私は大きなテキストファイルセットからすべての個々のUnixコマンドを抽出したいと思います。

これが私が今まで持っているものです:

txこの例では、コマンドのすべてのインスタンスを抽出します。その中にはテキスト文書がたくさん入っていて/PROJECT/DOCS 名前はすべてですwhatever.EXT

#!/bin/bash

rm -f ~/Documents/proc-search.txt 

cd /PROJECT/DOCS

for file in *

do
 echo "PROC Name: "$file >> ~/Documents/proc-search.txt
 echo "Description:" >> ~/Documents/proc-search.txt
 awk 'NR==1' $file >> ~/Documents/proc-search.txt
 echo "UNIX Commands:" >> ~/Documents/proc-search.txt
 awk '/tx/{print}' $file >> ~/Documents/proc-search.txt
 echo "########################################" >> ~/Documents/proc-search.txt

done

tx私はproc-search.txtを開き、実際にこのコマンドのすべてのインスタンスをキャプチャしたのでとても嬉しかったです。ただし、コマンドが含まれていないため、不要なファイルに関する情報も出力しますtxACPFM.EXT以下の例のように。除外する方法はありますか?フィールドファイルがありませんかtx

これが私が得た出力です。 proc-search.txtです。のレポートや.EXTコマンドをACPFM.EXT使用しない他の項目を見たくないことを除いて、問題はありません。tx

PROC Name: 17.EXT
Description:
* NORMPARD (EDIT CONTRL FILE)
UNIX Commands:
# tx @CONTRL                                    <- YAY!  This is a result that I want.
########################################
PROC Name: ACPFM.EXT                            <- I don't want this stanza.
Description:
* ACPFM (Account PARameter File Maintenance)
UNIX Commands:
########################################
PROC Name: ACTDARA.EXT
Description:
*
UNIX Commands:
#tx @SEQFILE                                    <- YAY!  This is a result that I want.
########################################
PROC Name: ACTEDIT.EXT
Description:
*
UNIX Commands:
#tx @SEQFILE                                    <- YAY!  This is a result that I want.
########################################

ベストアンサー1

あなたの(要約された)ループ

for file in *
do
 echo "PROC Name: "$file >> ~/Documents/proc-search.txt

 awk '/tx/{print}' $file >> ~/Documents/proc-search.txt
 
done

"PROC Name: foo"すべてのファイルに一致する行awkのみを印刷しますtx

たぶんあなたが望むかもしれません(ディレクトリと一致するものがないと仮定*)

for file in $(grep -l tx *)

これにより、ループ内のすべてのファイルにtx文字列が含まれます。

おすすめ記事