ベストアンサー フォルダ内の複数のテキストファイルから指定行の抽出 2017/02/06 15:04 あるフォルダ内に入っているテキストファイルの2行目を全て抽出して一つのファイルにまとめたいのですが、どのような方法があるのでしょうか? perlなどのスクリプトを教えてもらえればと思います。 みんなの回答 (2) 専門家の回答 質問者が選んだベストアンサー ベストアンサー notnot ベストアンサー率47% (4900/10358) 2017/02/06 20:37 回答No.1 awkだと簡単です。 awk 'FNR==2' * 通報する ありがとう 0 広告を見て他の回答を表示する(1) その他の回答 (1) kumoz ベストアンサー率64% (120/185) 2017/02/07 07:02 回答No.2 Perl では、特殊変数 $. で行番号を参照することができます。 perl -ne 'if ($. == 2) { print; close ARGV; }' *.txt 通報する ありがとう 0 カテゴリ [技術者向] コンピュータープログラミング・開発Perl 関連するQ&A テキストファイルの行抽出 linux環境のプログラムについて質問です。 ある特定のファイル(テキストファイル)内のデータで 指定の行を抽出する方法を教えていただきたいと思います。 現在はawkを使用してbashスクリプト内で下記のように head, tailを使用していますが、処理が重いように 感じます。perlまたはawkなどで行抽出の軽い処理は できないでしょうか? (他のunixコマンドでも結構です。) ---------------------------------------- RNUM=`awk 'END{print NR}' $1` #行番号取得 for iwl in `seq 1 $RNUM`;do BASE=`head -n $iwl $1 | tail -n 1` done #iwl ---------------------------------------- Fortran, Cなども使えますが、色々組み合わせて使う上で bash内のスクリプトで行ないたいと思います。 複数のテキストファイルからの行抽出 40KByteのテキストファイルが300ファイルあります。 aaa bbb ccc と複数の検索条件を含む行を抽出したいと思っています。 ファイル数も多いので極力自動で処理を行いたいです。 環境は、できればフリーソフトよりは windows、linuxのコマンドかoffice等のソフトを使用したいです。 良い方法があれば教えてください。 テキストファイルから指定行をExcelに抽出したい。 「WindowsXP」/「Office2003Professional」を使用しています。 一つのフォルダに格納された複数のテキストファイルから、指定した文字列を含んだ行だけをExcelに抽出し、一覧表にする方法を教えて下さい。 各テキストファイルの抽出したい部分は以下のようになっています。(一部抜粋) ------------------ +製造元 *NEC +型番 *ABC-000 +メモリMAX *512GB +スロット数 *2 +DIMM1 *256 MB *333MHz +DIMM2 *256 MB *333MHz ------------------ 文字の先頭に[+]がついているものが検索文字列で、[*]が抜き出したいデータ部分です。 (実際のテキストでは[+]や[*]は書いてありません。) これをExcelで検索文字列を項目名に指定し、[*]部分を抜き出し全テキストファイルを一覧表にしたいと思っています。(行列反転した表) ------------------ A B C D E F G 1 ファイル名 製造元 型番 メモリMAX スロット数 DIMM1 DIMM2 … 2 aaa.txt NEC ABC-000 512MB 2 256MB 256MB 3 bbb.txt FUJITU FMV10 1024MB 2 512MB ・ ・ ------------------ ●テキストファイルの検索文字列とデータの間には半角スペースが入っています。 ●テキストファイルの検索文字列の行位置はファイルごとに異なります。 ●テキストファイルの検索文字列の中にはファイルによっては存在しない文字列もあります。 ●ExcelのA列にはフォルダ内のファイル名が予め全て入力されています。 もしもVBAを使用しなければならない場合は、VBAの知識が無い為、勝手を申しますが詳しくご教示頂けると幸いです。 宜しくお願い致します。 テキストファイルから最終行の抽出 テキストファイルに出力された内容のうち、 最終行のみ抽出し、他のテキストファイルに 落とし込みたいと考えています。 DOSコマンドを使用して実現したいと思うのですが 良い方法などございましたら、ご教授ください。 宜しくお願い致します。 ※OSはWindows Server 2003を使用しています。 TXTファイルからExcelへ指定行を抽出 OffceXPを使用しております。 表題の通りなのですが、テキストファイル内のデータから指定した行をExcelのファイルへ抽出する方法を教えて下さい。 (ファイルは「.TXT」形式と「.CSV」形式の2種類が用意できます。) 当初はファイル名の一覧行を作り 「='ドライブ名:\フォルダ名\[ファイル名.csv]シート名'!$A$1」 の式を用いて表を作成しようとしたのですが、この方法ではファイルを全部開き値を更新しないとエラーが出てしまいました。 ファイルは200以上有り、1つ1つを開いてデータを引っ張るには無理があります。 フリーソフトを探してみましたが、指定文字を含む行を抽出するソフトは数多くあったのですが、 「指定行」というのが見つからず、お手上げです。 関数や数式・VBAもしくはフリーソフト等、簡易にデータ抽出が出来れば何でも結構です。 但し、VBAに関しては殆ど知識が無いので、解り易く書いて頂けると幸いです。 欲を言えば、ファイル名も同時に抽出出来ればあり難いですが、こちらはさほどこだわりません。 良い方法をご存知な方がいらっしゃればどうかご教示下さいませ。 宜しくお願い致します。 フォルダ内にあるテキストファイル複数行転記について Excel VBAにて、フォルダ内のテキストファイルの複数行をExcelに転記するにはどうしたら良いでしょうか。 WEBサイトで似たようなものがありましたが、このマクロは2行目のみの転記です。 実際は14、18、28、32行目を転記したいです。 +αで条件を追加すると以下のようになります。 ①フォルダ内には100件近くのテキストファイルがあり、全て順番に処理をしていく ②抽出したい行にはタブで数字が5つほど並んでいます。(画像の用な感じです。) ③28、32行目は転記しデータを区切った後、左側2つの数字は削除したいです。(全てのテキストファイルに適用) ④特に空白行は作らず、下に追加していく。(A1から開始) ⑤シートを新しく追加する。 Excelはo365を使用しています。 参考にしたマクロは以下のものです。 初心者の為、すみませんが教えてください。よろしくお願いします。 ******************************************** '指定フォルダの全テキストの任意行を取得 Sub GetAllTextData() 'フォルダ指定用のダイアログを表示します With Application.FileDialog(msoFileDialogFolderPicker) 'カレントディレクトリを指定します .InitialFileName = ThisWorkbook.Path '設定しなかったら終了します If .Show = False Then Exit Sub '設定したフォルダを表示します Dim Fname Fname = .SelectedItems(1) End With '参照設定 Dim FSO As Object, Folder As Variant, File As Variant Set FSO = CreateObject("Scripting.FileSystemObject") Dim FilePath As Variant ReDim FilePath(1 To 100) As Variant '指定フォルダ内の.txtファイルを探索します i = 0 For Each File In FSO.GetFolder(Fname).Files If InStr(File.Name, ".txt") > 0 Then i = i + 1 FilePath(i) = File.Path 'ファイルのフルパスを取得 End If Next '配列の大きさは状況に応じ変更してください Dim Hozon, GetData As Variant ReDim GetData(1 To 100, 1 To 100) As Variant '全テキストファイルの任意行のデータを取得する m = 0 For k = 1 To UBound(FilePath, 1) 'テキストファイルが存在する場合に実行 If IsEmpty(FilePath(k)) = False Then '保存する配列を空にする ReDim Hozon(1 To 100, 1 To 100) As Variant 'テキストを開いて配列にデータを保存 Open FilePath(k) For Input As #1 i = 0 'テキストをすべて取得する Do Until EOF(1) Line Input #1, buf i = i + 1 'コンマ区切りでデータを取得する a = Split(buf, ",") For j = 0 To UBound(a, 1) Hozon(i, j + 1) = a(j) Next Loop Close #1 '▼取得したいデータに応じ変更してください '任意行の値を取得する i = 2 '2行目のデータを取得 m = m + 1 For j = 1 To UBound(Hozon, 2) GetData(m, j) = Hozon(i, j) Next End If Next 'データ貼り付け With ActiveSheet .Range(.Cells(2, 1), .Cells(2, 1).Offset(UBound(GetData, 1) - 1, UBound(GetData, 2) - 1)) = GetData End With End Sub (参考サイト:https://daitaideit.com/vba-get-alltext/) テキストファイルから、一部の行を抽出したい 下記のようなテキストファイルの中から、抽出したい行だけを指定して、取り出す方法はありますでしょうか。 テキストファイルの中身(部分) <h3 align="center">顧客名1</h3> <table><tr><td>ABC商事</td><td>鹿児島県</td></tr></table> <h3 align="center">顧客名2</h3> <p>出版</p> <br> <table> <tr><td>A株式会社</td><td>宮崎県</td></tr> ←抽出したい行 <tr><td>bb株式会社</td><td>長崎県</td></tr> ←抽出したい行 </table> <p>教育</p> <br> <table> <tr><td>TT株式会社</td><td>鹿児島県</td></tr> ←抽出したい行 <tr><td>W株式会社</td><td>東京都</td></tr> ←抽出したい行 </table> <p>マスコミ<p> 以下省略 実際には、ファイルが大きく、抽出したい行が多いため、自動で処理できればと考えております。 VBAで作成できればと思っています。 <h3 align="center">顧客名2</h3> のあとに、<table>があれば、抽出を開始し、 </table> で、抽出をやめる、 また、<table>があれば、抽出を開始するということができればと 思うのですがよい方法がありましたら、ご教授いただければ幸いです。 よろしくお願いいたします。 テキストファイルからの抽出 VBAでもコマンドプロンプトでもいいのですが、1000行くらいあるテキストファイルを読み込んで、キーワード「タイムアウト」を含む行の1つ手前の行の文字列を抽出、それらを1つのファイルにまとめて出力させたいのです。 VBAで自分なりにやってみたのが http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q12142881517 の最後の回答にあるマクロに手を少し加えて「タイムアウト」のある行番号をテキストファイルに出力し、その出力ファイルを読み込んで、一つ手前の行番号のリストを作ることまではできました。 ですが、どうやってそのリストから行番号を指定して、元のファイルからタイムアウトを含む行の1つ手前の行を抽出し、1つのファイルにまとめて出力させられるのかが分かりません。 後Powershellはまだ勉強途中なのですが、こっちでならできますか? アドバイスをお願いします。 別ファイルからテキストを抽出 お世話になっています。 タイトルにあるように、別ファイルに記述のあるテキスト(改行あり)から、そのテキストを1行で変数に代入したく、以下のようにしています。 $file = "http://~"; $text = file($file); for($i=0: $i<count($text); $i++){ $text_data .= $text[$i]; } #上記スクリプトはコピペじゃなく、今手元で記述したもなので、間違っていたらすみません。 上記スクリプトにより変数に代入された1行テキストを他のスクリプトに利用したいのですが、上手くいかず、色々と試しているなかで、$text_dataを出力してメモ帳にコピペしてみると、何箇所かに改行されているところが確認できました。 改行されているところとは、元のファイルを作成する際、エンターキーにより改行されているところなのですが、改行されている前後をコピペする分には問題ないものの、テキスト全文(文字数は1万文字を数える)をコピペすると、エンターキーによる改行箇所(全てじゃないです)が、メモ帳において改行されてしまいます。(普段使っているterapadでは全てがコピペできていない) このような状況なのですが、別ファイルからテキストを1行として取得するには、どのようにしたら良いのでしょうか? 勉強不足でfile()を利用していますが、他の方法が思いつかず利用しているので、別の方法でも構いません。ご教示のほど宜しくお願い致します。 テキストファイルでの更に細かい抽出 おはようございます。前回、以下の質問をいたしました。その時は大変お世話になりました。 「テキストファイルに一行ずつ、バラバラの個人情報が入っているのですが (例:千葉県・東京都・茨城県・千葉県・群馬県・千葉県など) それを特定の一つだけを残したいのです。 (例:千葉県・千葉県・千葉県) その抽出方法を教えていただけませんでしょうか?」 この問題は皆さんの回答により、解決することができました。今回はこれより更に細かいものの抽出対象をしたいのです。 千葉県で抽出をすると、必要のない市まで抽出対象ででてきます。 それをコマンドプロンプトで千葉県を抽出する時に、必要のない特定の市を消す・または抜かすことはできますでしょうか? コマンドプロンプトで抽出した場合、テキストファイルの一行目と二行目の間に勝手に、 「□□□.TEXT」←抽出する前のファイル名 が作られてしまいます。 これをいちいち消すのが面倒くさいのです。 さらにその後開いて名前を付けて保存しなくてはならないのですが、デスクトップに「2005.06.11.dat」というように日付をダットファイルで保存できますでしょうか? 以上です。説明が下手で分かりにくいと思いますので、その都度、補足していきます。どうぞよろしくお願いいたします。 複数のエクセルファイルから特定の語を含む行を抽出したい エクセルで作成した複数の部品リストがあります。 特定の単語(型番)を含む行を抽出して、その行だけ集めたリストを作成したいのですが、そのような便利なツールはありませんか。 できあがるファイルはエクセルでもテキストでも構いません。 部品リストファイルは膨大な数があるので、ファイル毎そのツールにかけるのではなく、フォルダを指定して一気に処理できるとありがたいです。 テキストファイルからある規則に則った行を抽出したい UNIXのシェルプログラムについてご教示下さい。 当方、あるテキストファイルからある規則に則った行を抽出したいと考えています。 例えばテキストファイル内容が下記のようになっていたとします。 (分かりにくいと思いますが、イメージとしてはspiceのネットリストが該当します。) ~~~~~~~~~ Axxx aaaa aaaa Axxx bbbbbbbbbbb \ bbb BBB Bxxx cccccc ccccccc Bxxx dddddd dddd \ ddddddddddd Bxxx ee eeeee \ eeeeeeeeee \ eeeeeeee \ eeeee Bxxx XXX fffffff Bxxx ggg XXX Bxxx hhhhh XXX \ hhhhhhhhhh ~~~~~~~~~~~ この中から下記条件に沿うものを抽出したテキストファイルを作成したいです。 1. 「B」で始まる行を抽出する。 2. 1を満たし、「\」で改行される場合は、改行が続く限り抽出対象とする。 3. 1を満たしていても、「XXX」を含む場合は抽出対象外とする。 即ち、実現したいのは上記の結果から下記を得られるシェルスクリプトです。 ~~~~~~~~~ Bxxx cccccc ccccccc Bxxx dddddd dddd \ ddddddddddd Bxxx ee eeeee \ eeeeeeeeee \ eeeeeeee \ eeeee ~~~~~~~~~~~ 自身でもawkとgetlineで作ってみたのですが、上記に示す条件2を実現できず困っています。 ご回答に際しご不明な点がございましたら、その旨ご報告ください。 愚問で恐縮ですが、ご回答の程宜しくお願い致します。 # 急ぎの用件ですが、ご回答くださってもお礼を申し上げられるのは 最速で明日の夜となることを予めご承知おきください。 テキストファイル→抽出した行をexcelに VBAで、下記のようなログファイルのテキストを読み込んで、必要な文字が含まれる行だけを、エクセルに書き込むコードを教えていただけると助かります。 読み込むファイルの例(実際は、数万行あります) (1行目)dammy.co.jp - - [01/Jan/2015:00:03:51 +0900] "GET /west/index.html HTTP/1.0" 200 ..... (2行目)smotor.co.jp - - [01/Jan/2015:00:03:51 +0900] "GET /drink/orange/index.html HTTP/1.0" 200 ..... たとえば、/west/ が含まれる行だけを抽出して、excelシートに書き込みたい ログファイルは、改行コードがCRLFです。 どなたかお分かりになる方、お助けください。 当方、VBAは初心者なので、説明も加えていただけると非常に助かります。 テキストファイルの行を指定して読み込み テキストファイルの読み込みたい行を指定して テキストボックスに表示させたいのですが、 どのようにすればよいでしょうか? StreamReaderには一行分の文字を読み取るReadLine メソッドがありますが、行は指定はできないようです。 良い方法があればアドバイスを頂きたいです。 よろしくお願いします。 --- 開発環境:VS2005 pro OS:Vista ある文字列を含む行の抽出 お世話になります。 いくつかのテキストファイルがあり、それらのファイルのなかの、特定の文字列を含む行をすべて抽出して、別ファイルに集めて保存するようなことを、自動的に行うことはできますでしょうか?? officeソフトでできればよいのですが、ほかの方法でもかまいません。 お願いいたします。 Windows版Perlでの行の抽出の問題 Windowsのバッチファイルで、Perlを使って特定の文字列を含む行を抽出する処理を行っているのですが、うまくいかないケースがあります。 例えば、以下の線内のようなテキストがあって、 ---------------------- 〔a 〔A ゜a ゜A ---------------------- 大文字/小文字を問わず、「〔a」を含む行を抽出し、 以下の線内のような結果を得たいとします。 ---------------------- 〔a 〔A ---------------------- 検索対象ファイルの文字コードが「Shift-JIS」で、 「print if ( /〔a/i );」という構文で行を抽出すると、 以下の結果になってしまいます。 ---------------------- 〔a 〔A ゜a ゜A ---------------------- 「print if ( /〔a/ );」なら以下の結果になってしまいます。 ---------------------- 〔a ---------------------- 検索対象ファイルの文字コードを「UTF-8」にし、 「print if ( /〔a/ );」という構文で、 「〔a」を含む行を抽出しようとすると、何も行が抽出されません。 他のコマンドでの大文字/小文字問わない「〔a」を含む行の抽出は、 findstrでは得たい結果が得られ、 grep、AWKでは、Perl同様、「゜a」を含む行が抽出されてしまいます。 しかし、私が行いたい処理は、数百~数千程度の単語が書かれた単語のリストがあり、そのリストをスクリプト形式に置換して行を検索するので、スクリプトファイルに対応していないfindstrコマンドでは不便なのです。 上記の問題の原因が分かる方がおられましたら、お教え頂けないでしょうか。 指定した数値より小さい数値がある行を抽出したい バッチファイルで、指定した数値より小さい数値を含む行を抽出したいのですが、そのような事は可能でしょうか。 環境はWindowsXPです。 例えば、「a.txt」というテキストファイルがあって、以下の様な内容の場合に、「40」以下の数値を含む行を抽出するという事は可能でしょうか。 ――――――――――――――――― 【a.txtの内容】 ――――――――――――――――― 30 50 70 ――――――――――――――――― 使用するコマンドは、WidnowsXP上で動作するものであればなんでも構いません。 何か良い方法をご存知の方がおられましたら、お教え頂けないでしょうか。 何卒、宜しくお願い致します。 指定した文字列を含む行から、指定した文字列を 含む行まで、全ての行を抽出して別ファイル(名前は元ファイルと同じ)としたいのです。 対象ファイルに結果を上書きでもかまいません。 指定したフォルダの中にある複数のフォルダ各々に1つずつ入っているテキストファイルが対象になります。 例) 東京都 新宿区 <start123AAA> 東京都 港区 <end>AAABBB 東京都 目黒区 どのファイルにも必ず<start と<end の文字列があります。(必ず1組です) <start の文字列を含む行から <end の文字列を含む行までを 抽出したいのです。 (欲しい結果↓) <start123AAA> 東京都 港区 <end>AAABBB フリーのエディタソフトのgrep、grepのマクロ、バッチでできないものかと試してみているのですが どうしてもうまくいきません。 抽出したい範囲、削除する範囲には禁則文字?が入っているのでバッチは難しいのでしょうか? できればバッチで処理できればなと思っているのですが、うまくいきません。 (<>!""/ あたりが入っています。別の文字に置き換えることは可能です) 範囲を抽出ではなく、 <startを含む行の一つ上の行から前を全て削除 <endを含む行の一つしたの行から後を全て削除 する方法や VBAで、スタート行をとエンド行をSearchして抽出する方法など ご教授いただきたくお願い致します。 複数のテキストファイル内の複数行を一括して削除 同一のフォルダにある複数のテキストファイルに対して ************ と ************ で囲まれた部分(複数行)を一括して削除できる方法はありますでしょうか。 ************ と ************ で囲まれた部分は、行数も内容も同じではありません。 例1: ************ 123 abc ************ 例2: ************ あいうえ かきくけ 123 abc ************ VBAで複数ファイルからのデータ抽出を行いたい。 すみません、知恵をお貸しください。 VBA初心者です。 一つの同じフォルダ内にあるエクセルの同じ形式の複数ファイル(*.xls)から、データを抽出し(例.A2:k2)一つのファイルを作成したいのですが、どうにか一行目だけを抽出することができました。 しかし、データ抽出をしたい複数ファイルの中には(A2:k2)だけではなく、複数行に渡りデータが入っているもの(A3:k3まで、やA5:k5までなど)があり、それら全てを抽出したいのです。 何らかの条件付けの上でループをさせればいいのかな?とも考えたのですが、うまくいきません。 どうかご教授お願いします。 注目のQ&A 「前置詞」が入った曲といえば? 新幹線で駅弁食べますか? ポテチを毎日3袋ずつ食べています。 優しいモラハラの見抜き方ってあるのか モテる女性の特徴は? 口蓋裂と結婚 らくになりたい 喪女の恋愛、結婚 炭酸水の使い道は キリスト教やユダヤ教は、人殺しは地獄行きですか? カテゴリ [技術者向] コンピューター プログラミング・開発 Microsoft ASPC・C++・C#CGIJavaJavaScriptPerlPHPVisual BasicHTMLXMLCSSFlashAJAXRubySwiftPythonパフォーマンス・チューニングオープンソース開発SEOスマートフォンアプリ開発その他(プログラミング・開発) カテゴリ一覧を見る あなたにピッタリな商品が見つかる! OKWAVE セレクト コスメ化粧品 化粧水・クレンジングなど 健康食品・サプリ コンブチャなど バス用品 入浴剤・アミノ酸シャンプーなど スマホアプリ マッチングアプリなど ヘアケア 白髪染めヘアカラーなど