比較的大きなテキストファイルを連結する必要がありますが、コマンドラインを使用して連結することをお勧めします。残念ながら、私はWindowsしか持っていないため、新しいソフトウェアをインストールできません。
type file1.txt file2.txt > out.txt
私はほとんど欲しいものを手に入れることができますが、file2.txtの1行目をout.txtに含めたくありません。
more
には、開始行を指定する+n
オプションがあることに気付きましたが、これらを組み合わせて必要な結果を得ることができませんでした。 Windowsではこれが不可能な場合があることを認識しています。out.txtをいつでも手動で編集して行を削除できますが、コマンドラインから簡単に実行する方法はありますか。
more +2 file2.txt > temp
type temp file1.txt > out.txt
または、copy
を使用できます。詳細については、copy /?
を参照してください。
copy /b temp+file1.txt out.txt
私はこれを使用し、それは私のためにうまく機能します:
TYPE \\Server\Share\Folder\*.csv >> C:\Folder\ConcatenatedFile.csv
もちろん、毎回実行する前に、DELETE C:\Folder\ConcatenatedFile.csv
する必要があります
唯一の問題は、すべてのファイルにヘッダーがある場合、すべてのファイルでヘッダーが繰り返されることです。
*.csv >> ConcatenatedFile.csv
を使用する推奨事項についてコメントするのに十分な評価ポイントがありませんが、警告を追加できます。
連結に使用しているのと同じディレクトリにConcatenatedFile.csv
ファイルを作成すると、それ自体に追加されます。
FORコマンドを使用してファイルを1行ずつエコーし、「skip」オプションを使用して開始行の数を逃します...
FOR /F "skip=1" %i in (file2.txt) do @echo %i
次のようなものを含むバッチファイルの出力をリダイレクトできます。
FOR /F %%i in (file1.txt) do @echo %%i
FOR /F "skip=1" %%i in (file2.txt) do @echo %%i
FOR変数がバッチファイル内で使用されている場合、二重%に注意してください。
私の担当者が低すぎることを除いて、これをghostdog74へのコメントに入れます。more +2 file2.txt > temp
このコードは、実際にはファイルの行1と2を無視します。 OPは最初のファイルのすべての行を保持し(ヘッダー行を維持するため)、2番目のファイルの最初の行(おそらく同じヘッダー行)を除外するため、ヘッダー行のみを除外するにはOPはmore +1
を使用する必要があります。
type temp file1.txt > out.txt
このコードからどのような順序が生じるかは不明です。 temp
がfile1.txt
に追加されている(必要に応じて)か、file1.txt
がtemp
に追加されている(ヘッダー行が結果ファイルの中央に埋め込まれるため、望ましくない)。
さらに、これらの操作には大きなファイル(例:300MB)を使用すると本当に長い時間がかかります
これを行う方法は次のとおりです。
(type file1.txt && more +1 file2.txt) > out.txt
ソフトウェアをインストールすることはできないと言っていましたが、その制限がどれほどきついかはわかりません。とにかく、私は同じ問題を抱えていて(おそらく同じヘッダーで2つのファイルを連結しようとしました)、このページに到着した他の人に別の答えを提供すると思いました。
たくさんのコマンドをWindowsで試し、非常にイライラし、大きなファイルを開くことができると約束したができなかったあらゆる種類のグラフィカルエディターを試した後、ようやくLinuxルートに戻ってCygwinを開きましたプロンプト。 2つのコマンド:
cp file1.csv out.csv
tail -n+2 file2.csv >> out.csv
file1.csv
800MBおよびfile2.csv
400MBの場合、これらの2つのコマンドは私のマシンで5秒未満かかりました。 Cygwinプロンプトでは、それ以下です。 CygwinではLinuxコマンドが遅いはずだと思っていましたが、そのアプローチははるかに少ない労力で、私が見つけたどのウィンドウアプローチよりもずっと簡単でした。
PowerShellで:
Get-Content file1.txt | Out-File out.txt
Get-Content file2.txt | Select-Object -Skip 1 | Out-File -Append out.txt
これも簡単に試すことができます
type file2.txt >> file1.txt
File1.txtの最後にfile2.txtの内容を追加します
元のfile1.txtが必要な場合は、事前にバックアップを作成してください。または、これを行うことができます
type file1.txt > out.txt
type file2.txt >> out.txt
最初のファイルの終わりで改行したい場合は、追加する前に次のコマンドを試すことができます。
type file1.txt > out.txt
printf "\n" >> out.txt
type file2.txt >> out.txt
copy
のヘルプでは、ワイルドカードを使用して複数のファイルを1つに連結できることが説明されています。
たとえば、「abc」で始まる現在のフォルダー内のすべての.txtファイルをxyz.txtという名前の単一のファイルにコピーするには、次のようにします。
copy abc*.txt xyz.txt