Saya punya daftar files.txt, di bawah:
-rw-rw-r-- 1 root dev 11 May 16 12:18 20_SumActive.txt
-rw-rw-r-- 1 root dev 11 May 16 12:18 22_SumActive.txt
-rw-rw-r-- 1 root dev 7 May 16 12:18 24_SumActive.txt
-rw-rw-r-- 1 root dev 0 May 16 12:18 26_SumActive.txt
-rw-rw-r-- 1 root dev 0 May 16 12:18 28_SumActive.txt
Keluaran:
kpgmeddev01> cat 2[0-8]_SumActive.txt
Sum: 47760
Sum: 72000
Sum: 0
Cara mendapatkan output seperti di bawah ini:
Sum: 47760
Sum: 72000
Sum: 0
[Blank]
[Blank]
Butuh bimbingan.
command-line
solaris
Sedikit
sumber
sumber
[Blank]
, maksud Anda 7 karakter itu atau Anda bermaksud menunjukkan baris kosong?Jawaban:
cat
tidak dapat menampilkan data yang tidak ada dalam file. Jika file kosong, itu bahkan tidak memiliki karakter baris baru untuk memberikan baris kosong sebagai output.Anda dapat memastikan bahwa file berisi setidaknya satu karakter baris baru.
Ini adalah bagaimana Anda menggunakan GNU
awk
untuk memastikan bahwa (ini memodifikasi file kosong):The
ENDFILE
blok akan dieksekusi setelah menyelesaikan membaca salah satu file. JikaFNR
nol, kami tidak pernah melihat baris apa pun di file, jadi kami memasukkan satu baris baru ke dalamnya. Script kemudian dilanjutkan dengan file selanjutnya.Anda kemudian dapat menggunakan
cat
seperti yang Anda lakukan dalam pertanyaan.Atau, tanpa mengubah file, gunakan GNU
awk
alih-alihcat
:Ini melakukan pendeteksian file kosong yang sama seperti di atas, tetapi mencetak baris baru ke output standar daripada ke file. Pada
1
akhirnya dapat diganti oleh{ print }
dan akan menyebabkan semua data dalam file yang tidak kosong akan dihasilkan.Sebagai alternatif, sebuah loop shell (harus bekerja di shell POSIX):
The
-s
tes akan benar jika file ada dan memiliki lebih besar ukuran dari nol.Jika Anda ingin string literal
[Blank]
dihasilkan untuk file kosong, cukup masukkan string itu di depan\n
dalam panggilan keprintf
atas (ini juga akan berfungsi dalamawk
kode).sumber
Dengan
perl
Yang menambahkan karakter baris baru jika tidak ada di bagian akhir, sehingga akan menampilkan baris kosong untuk file kosong, tetapi juga akan menambahkan baris baru untuk file tidak kosong yang melewatkan file (dan akan berakhir digabungkan pada satu baris dengan
cat
).sumber
(Ini bukan apa yang Anda minta, tapi :) Dalam situasi seperti ini saya lebih suka menggunakan
head
Biasanya ini yang Anda inginkan. Jika tidak mudah untuk
sed
nantisumber
Dengan
xargs
dangrep
Anda dapat mencoba sesuatu seperti:sumber
Dengan asumsi bahwa yang
[Blank]
Anda maksud adalah baris kosong literal, ini harusnya berfungsi:sumber
Anda dapat menguji setiap file untuk melihat apakah panjangnya nol sebelum mencoba menampilkan isinya:
Saya telah menggunakan
awk 1 "$f"
alih-alihcat "$f"
karenaawk
jaminan untuk mengakhiri output file dengan baris baru.Dalam pertanyaan Anda, jika Anda bermaksud agar
[blank]
tidak menjadi literal, tetapi hanya baris kosong, Anda dapat menerapkan ini menggunakan kode di atas dan menghapus'[Blank]'
dari akhirecho
pernyataan.sumber
Saya mengasumsikan file Anda 26_SumActive.txt dan 28_SumActive.txt kosong dan Anda perlu baris kosong saat menampilkan kontennya
Untuk ini, Anda bisa mengulangi daftar file Anda, dan isi isinya, dan jika file kosong, gema baris kosong.
[ -s FILE ]
Benar jika FILE ada dan memiliki ukuran lebih besar dari nol.sumber
if [ -s $i ]; then cat $i; else echo -e ""; fi;
. Masih memberi +1 untuk tes sederhana menggunakan fungsionalitas shell standar saja.cat "$i"; test -s "$i" || echo
- tidak perlu untuk bendera yang sulitif
atau non-portabelecho
.di mana - akan memungkinkan kucing membaca dari input standar.
Jadi, setelah menampilkan konten file Anda, kucing akan menunggu input Anda. Anda dapat membuat input yang Anda inginkan, dengan menekan enter untuk literal blank atau [Blank] jika itu yang Anda inginkan. Setelah setiap input tekan enter, setelah semua input dibuat tekan ^ D (Ctrl + D) dan Anda selesai.
PS: Untuk setiap input Anda akan mendapatkan output masing-masing.
Dengan ini, Anda dapat mengosongkan atau sesuatu yang Anda inginkan, di antara dua urutan output.
sumber
cat
sebagai solusi dan membiarkan OP untuk apa yang mereka inginkan.