• ベストアンサー

フォルダ内の複数のテキストファイルから指定行の抽出

あるフォルダ内に入っているテキストファイルの2行目を全て抽出して一つのファイルにまとめたいのですが、どのような方法があるのでしょうか? perlなどのスクリプトを教えてもらえればと思います。

  • Perl
  • 回答数2
  • ありがとう数0

質問者が選んだベストアンサー

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4846/10257)
回答No.1

awkだと簡単です。 awk 'FNR==2' *

その他の回答 (1)

  • kumoz
  • ベストアンサー率64% (120/185)
回答No.2

Perl では、特殊変数 $. で行番号を参照することができます。 perl -ne 'if ($. == 2) { print; close ARGV; }' *.txt

関連する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()を利用していますが、他の方法が思いつかず利用しているので、別の方法でも構いません。ご教示のほど宜しくお願い致します。

    • ベストアンサー
    • PHP
  • テキストファイルでの更に細かい抽出

    おはようございます。前回、以下の質問をいたしました。その時は大変お世話になりました。 「テキストファイルに一行ずつ、バラバラの個人情報が入っているのですが (例:千葉県・東京都・茨城県・千葉県・群馬県・千葉県など) それを特定の一つだけを残したいのです。 (例:千葉県・千葉県・千葉県) その抽出方法を教えていただけませんでしょうか?」 この問題は皆さんの回答により、解決することができました。今回はこれより更に細かいものの抽出対象をしたいのです。 千葉県で抽出をすると、必要のない市まで抽出対象ででてきます。 それをコマンドプロンプトで千葉県を抽出する時に、必要のない特定の市を消す・または抜かすことはできますでしょうか? コマンドプロンプトで抽出した場合、テキストファイルの一行目と二行目の間に勝手に、 「□□□.TEXT」←抽出する前のファイル名 が作られてしまいます。 これをいちいち消すのが面倒くさいのです。 さらにその後開いて名前を付けて保存しなくてはならないのですが、デスクトップに「2005.06.11.dat」というように日付をダットファイルで保存できますでしょうか? 以上です。説明が下手で分かりにくいと思いますので、その都度、補足していきます。どうぞよろしくお願いいたします。

専門家に質問してみよう