Saya ingin menggabungkan beberapa file teks menjadi satu file besar di terminal. Saya tahu saya bisa melakukan ini menggunakan perintah cat. Namun, saya ingin nama file dari setiap file untuk mendahului "dump data" untuk file itu. Adakah yang tahu bagaimana melakukan ini?
apa yang saya miliki saat ini:
file1.txt = bluemoongoodbeer
file2.txt = awesomepossum
file3.txt = hownowbrowncow
cat file1.txt file2.txt file3.txt
output yang diinginkan:
file1
bluemoongoodbeer
file2
awesomepossum
file3
hownowbrowncow
Jawaban:
Sedang mencari hal yang sama, dan menemukan ini menyarankan:
Keluaran:
Jika hanya ada satu file maka header tidak akan dicetak. Jika menggunakan utils GNU, Anda dapat menggunakannya
-v
untuk selalu mencetak header.sumber
-n +1
pilihan! Alternatif:head -n-0 file1 file2 file3
.-n
dan+1
, seperti pada-n+1
.tail -n +1 *
sebenarnya adalah yang saya cari, terima kasih!sudo ulimit -n 1024; find -f . -name "*.rb" | xargs tail -n+1 > ./source_ruby.txt
Saya menggunakan grep untuk sesuatu yang serupa:
Itu tidak memberi Anda 'header', tetapi awalan setiap baris dengan nama file.
sumber
*.txt
diperluas hanya ke satu file. Dalam hal ini, saya akan menyarankangrep '' /dev/null *.txt
grep
hanya akan mencetak header file jika ada lebih dari satu file. Jika Anda ingin selalu memastikan jalur file, gunakan-H
. Jika Anda tidak ingin header digunakan-h
. Juga perhatikan itu akan mencetak(standard input)
untuk STDIN.ag
(pencari perak): secara default,ag . *.txt
awalan setiap file dengan namanya, dan setiap baris dengan nomornya.-n
ke grep juga menghasilkan nomor baris yang memungkinkan Anda untuk menulis linter sederhana dengan penentuan yang dapat diambil oleh, misalnya, emacs.Ini harus melakukan triknya juga:
Cara:
Anda selanjutnya dapat menggabungkan pencarian melalui operator boolean seperti
-and
atau-or
.find -ls
itu bagus juga.sumber
-print
tidak akan mencetak nama file sebelumcat
.-printf
untuk menyesuaikan output. Misalnya:find *.conf -type f -printf '\n==> %p <==\n' -exec cat {} \;
untuk mencocokkan keluarantail -n +1 *
brew install findutils
dan kemudian menggunakangfind
bukannyafind
.find
memungkinkan banyak-exec
s:find -name '*.conf' -exec printf '\n\e[33;1m%s\e[0m\n' {} \; -exec cat {} \;
Ini harus melakukan trik:
atau melakukan ini untuk semua file teks secara rekursif:
sumber
$0
adalah seluruh baris, jadi Anda sebenarnya punya kolom berulang di sana ...Saya memiliki serangkaian file yang berakhir dengan stats.txt yang ingin saya gabungkan dengan nama file.
Saya melakukan yang berikut dan ketika ada lebih dari satu file, perintah "lebih" termasuk nama file sebagai header.
atau untuk kasus umum
sumber
more <FILES> | cat
Ini akan mencetak nama file lengkap (termasuk jalur), lalu isi file. Ini juga sangat fleksibel, karena Anda dapat menggunakan -nama "expr" untuk perintah find, dan menjalankan perintah sebanyak yang Anda suka pada file.
sumber
grep
. Untuk digunakan denganbash
:find . -type f -print | grep PATTERN | xargs -n 1 -I {} -i bash -c 'echo ==== {} ====; cat {}; echo'
Saya suka opsi ini
Output terlihat seperti ini:
sumber
Ini adalah cara saya biasanya menangani pemformatan seperti itu:
Saya biasanya menyalurkan kucing ke grep untuk mendapatkan informasi spesifik.
sumber
for i in *
tidak akan menyertakan subdirektori.Dan solusi awk yang hilang adalah:
sumber
1
di akhir ekspresi?Anda dapat menggunakan perintah sederhana ini alih-alih menggunakan for loop,
sumber
Jika Anda suka warna, coba ini:
atau:
atau: (dengan paket 'multitail' diinstal)
sumber
find . -type f -name "*.txt" | xargs -I {} bash -c "echo $'\e[33;1m'{}$'\e[0m';cat {}"
Jika semua file memiliki nama yang sama atau dapat dicocokkan
find
, Anda dapat melakukan (mis.):untuk menemukan, tunjukkan path dan cat setiap file.
sumber
Ini cara yang sangat sederhana. Anda bilang ingin cat, yang berarti Anda ingin melihat seluruh file. Tetapi Anda juga perlu nama file dicetak.
Coba ini
head -n99999999 *
atauhead -n99999999 file1.txt file2.txt file3.txt
Semoga itu bisa membantu
sumber
head -n -0 file.txt file2.txt file3.txt
. Bekerja untukhead
dalam GNUMetode ini akan mencetak nama file dan kemudian isi file:
Keluaran:
sumber
-f
berguna jika Anda ingin melacak file yang sedang ditulis, tetapi tidak benar-benar dalam ruang lingkup apa yang diminta OP.Jika Anda ingin mengganti yang jelek ==> <== dengan yang lain
penjelasan:
tail -n +1 *.txt
- Keluarkan semua file dalam folder dengan headersed -e 's/==>/\n###/g' -e 's/<==/###/g'
- ganti==>
dengan baris baru + ### dan<==
hanya dengan ###>> "files.txt"
- Keluarkan semua ke filesumber
sumber
Jika Anda ingin hasil dalam format yang sama dengan output yang Anda inginkan, Anda dapat mencoba:
Hasil:
Anda dapat meletakkan
echo -e
sebelum dan sesudah pemotongan sehingga Anda memiliki jarak antar garis juga:Hasil:
sumber
for
loop melewati daftarls
perintah yang dihasilkan.$ ls file{1..3}.txt
Hasil:file1.txt file2.txt file3.txt
setiap iterasi akanecho
menjadi$file
string kemudian disalurkan kecut
perintah di mana saya digunakan.
sebagai pemisah bidang yang memecah fileX.txt menjadi dua bagian dan mencetak bidang1 (bidang2 adalah txt) Selebihnya harus jelas... memelototi mereka yang sudah menyebutkan kepala bekerja untuk sebagian dari kita:
Kebutuhan saya adalah membaca baris pertama; seperti yang disebutkan, jika Anda ingin lebih dari 10 baris, Anda harus menambahkan opsi (head -9999, dll).
Maaf telah memposting komentar turunan; Saya tidak memiliki kredibilitas jalanan yang memadai untuk berkomentar / menambahkan komentar seseorang.
sumber
Untuk menyelesaikan tugas ini saya biasanya menggunakan perintah berikut:
Ini adalah cara yang sangat mudah untuk menggabungkan file jika jumlah file cukup besar.
sumber
Pertama saya membuat setiap file: echo 'informasi'> file1.txt untuk setiap file [123] .txt.
Lalu saya mencetak setiap file untuk memastikan informasi benar: file ekor? .Txt
Lalu saya melakukan ini: file ekor? .Txt >> Mainfile.txt. Ini menciptakan Mainfile.txt untuk menyimpan informasi di setiap file menjadi file utama.
cat Mainfile.txt mengonfirmasi bahwa itu baik-baik saja.
==> file1.txt <== bluemoongoodbeer
==> file2.txt <== awesomepossum
==> file3.txt <== hownowbrowncow
sumber