Cara memilih baris pertama dari setiap file dalam direktori dan mencetaknya ke file teks baru


13

Saya memiliki direktori dengan beberapa .txtfile.

Dari masing-masing file ini, saya ingin memilih baris pertama dan mencetaknya ke .txtfile baru (untuk mendapatkan daftar semua baris pertama).

Saya mencoba dengan awkdan sedperintah dan dikombinasikan dengan lingkaran, tetapi tidak berhasil.


1
Sebagai Anda reputasi 6 pengguna: Jika salah satu anwsers bawah membantu Anda, jangan lupa klik abu-abu di sebelah kiri teks, yang berarti Ya, jawaban ini berlaku ! ;-)
Fabby

Jawaban:


21

Gunakan head:

head -n1 -q *.txt > new-file
  • -n1memberitahu headuntuk mengekstrak baris pertama saja.
  • -q memberitahu kepala untuk tidak mencetak nama file.

9

Menggunakan grep:

grep -m 1 '.' *.txt >output.file

grepakan cocok dengan karakter apa pun dan akan keluar setelah pertandingan pertama yaitu grepakan menampilkan baris pertama dari semua file input dan kami menyimpannya out.txt.


1
Saya suka ini, ini adalah hack kecil yang bagus.
Hashim

2

Hanya menggunakan Bash:

for f in *.txt; do <"$f" read line; printf "$line\n" >>new.txt; done
  • *.txtdiperluas ke daftar folder / file yang diakhiri dengan .txtdi direktori kerja saat ini (karena hanya ada file folder yang berakhir dengan .txttidak menjadi perhatian);
  • <"$f" read linemembaca satu baris dari jalur file yang disimpan fdan menyimpannya di line;
  • printf "$line\n" >>new.txt: menambahkan konten lineke new.txt;
% cat foo.txt 
line #1 in foo
line #2 in foo
line #3 in foo

% cat bar.txt
line #1 in bar
line #2 in bar
line #3 in bar

% for f in *.txt; do <"$f" read line; printf "$line\n" >>new.txt; done

% cat new.txt 
line #1 in bar
line #1 in foo

kos, agak panjang tapi di sini +1 ..
heemayl

@ Heemayl Tapi hanya untuk Bash. ;)
kos

1
BTW
mengucapkan

1
@ heemayl Terima kasih: D. Jujur saya memeriksa situs seperti orang gila hanya demi melindungi pertanyaan XD
kos

0

Anda telah mencobanya awk, ini adalah awkversi

awk 'FNR==1 {print} {nextfile}' *.txt > out

0

Pendekatan lain dengan AWK adalah untuk memberitahu AWK untuk mencetak, tetapi kemudian segera pergi ke file berikutnya

tmp:$ touch file1 file2 file3

tmp:$ printf  "Line 1 \n Line 2" | tee file1 file2 file3
Line 1 
 Line 2
tmp:$ awk '{print;nextfile}' file1 file2 file3
Line 1 
Line 1 
Line 1

sedjuga memungkinkan pencetakan garis tertentu. Di sini saya sudah mengombinasikannya denganfind

tmp:$ find . -name "file*" -exec  sed -n '1p' {} \;                            
Line 1 
Line 1 
Line 1 

Dan perl:

tmp:$ find . -name "file*"  -exec perl -ne 'print  if 1..1' {} \;              
Line 1 
Line 1 
Line 1 

Dan yang tak kalah pentingnya, grep

tmp:$ grep -n 1 file1 file2 file3                                              
file1:1:Line 1 
file2:1:Line 1 
file3:1:Line 1 

Menyimpan semuanya ke satu file hanya masalah menambahkan > outputFile.txtpada akhir perintah ini.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.