複数のサブフォルダがあるディレクトリがあり、すべてのサブフォルダには複数のテキストファイルが含まれており、これらのテキストファイルの形式は次のとおりです。
data01:data02
後で data02 を抽出し、:
ルートディレクトリの単一ファイルにエクスポートする必要があります。抽出は完了しましたが、複数のディレクトリとファイルでどのように実行しますか?
答え1
「find」と「awk」を使用して、次のコマンドラインをカスタマイズできます。
find FOLDERLIST -type f -iname "PATTERN" \
-exec awk -F":" 'NF>1 {print $2}' "{}" \; > /PATH/TO/RESULTFILE
どこ
- FOLDERLISTは、再帰的に検索する最上位フォルダのスペースで区切られたリストです。ここで、「現在のフォルダ」は点です(find)。 - Fを入力してください...
- 「-type f」はファイル検索にのみ使用されます。
- PATTERNは関心のあるファイルの一般的なパターンです。たとえば、アスタリスク「*」はすべてのファイルを検索し、「*.csv」はCSVファイルを探します。
- /PATH/TO/RESULTFILE は、ルートディレクトリにある結果ファイルの名前です。
- 「awk」部分は、「:」で見つかったすべてのファイルを分割し、空の結果をスキップします。
編集:Steeldriverが提案したように、null結果チェックをNF> 1に調整しました。
答え2
出力ファイルの形式を提供していないので、2番目のフィールドが別々の行にあることを想定しています。以下を使用できます(すべてのファイルがa:b
質問に記載されている形式であると仮定)。
find directory -type f \
-exec awk -F: '{print $2}' "{}" >> /output.txt \;
directory
サブディレクトリでファイルを見つけてコマンドを実行すると、結果のawk -F: '{print $2}' "{}" >> /output.txt
値が:
ファイルに書き込まれます/output.txt
。