Üstbilgiyi korurken büyük veri dosyası nasıl kaydırılır


19

Ekranı hem dikey hem de yatay yönde taşan bazı büyük veri dosyam olduğunu varsayalım. Başlık satırları ekranda kalırken bu dosyaya nasıl göz atabilirim?

Şimdilik kullanıyorum less -S, böylece dosyamı yatay ve dikey olarak güzelce kaydırabilirim. Ancak, aşağı kaydırırken başlık satırları kaybolur. Bunları daha az kullanmaya devam etmenin bir yolu var mı?

Alternatif olarak vimbölünmüş ekran modunda kullanmaktır :set nowrap. Ancak, yatay olarak kaydırırsam, üst pencere aynı şekilde :windo set scrollbindkaydırılmaz ( yalnızca bildiğim kadarıyla dikey kaydırma için çalışır).


Veriler kaydırılmaya devam ederken üstbilgiyle görünür ne demek istiyorsun? Yalnızca sütun adlarına sahip ilk satırın aynı kalmasını istediğiniz anlamına mı geliyorsunuz? Yalnızca verileri olan tek bir dosya mıdır ve bu veriler sürekli değişiyor mu ve bu nedenle yalnızca değişen satırları görmek mi istiyorsunuz? Yalnızca ilk N satırını mı yoksa son N satırını mı görmek istiyorsunuz?
Polym

2
@polym: lessveya tail -fekranda gösterilen ilk satırın her zaman başlık satırı olması dışında, normalde olduğu gibi davranır. Sabit bir başlığa sahip ancak kayan gövdeye sahip web siteleri (veya Excel) gibi.
Mat

@polym ^ ne derse desin!
Debanjan Basu

@polym, Bir e-tabloda yatay ve dikey bir görünümü nasıl dondurabileceğinizi düşünün. Dondurulmuş sütunlar kaydırma sırasında yerinde kalır.
user208145

Yanıtlar:


11

Vim'e aşina iseniz, bu muhtemelen sizin için en iyi seçenektir. Aşağıdakileri değiştirerek yalnızca yatay kaydırma-bağlama özelliğini etkinleştirebilirsiniz 'scrollopt':

set scrollopt=hor

Böylece, ile vim -u NONEistediğiniz davranışı elde edersiniz:

:set scrollopt=hor
:set nowrap
:1split
:windo set scrollbind

Kaç sütunun atlanacağını ve kenar atlamanın ne kadar başlayacağını ayarlamak 'sidescroll've 'sidescrolloff'değiştirmek isteyebilirsiniz .


1
Bunu daha az ile yapmanın bir yolu var mı? Özellikle muazzam veri dosyalarında gezinirken (belleğe yüklenemeyecek kadar büyük)?
NM

@NM: Diğer cevaplara bakın
Thor

Bunu denedim ve alt pencereyi aşağı kaydırdığımda, üst pencere de aşağı
kaydırıyor

@DanielSerodio: Bir şeyler değişmiş gibi görünüyor. Kaydırma ayarını yaparsanız çalışır hor, güncellenmiş cevaba bakın
Thor

Güncellenmiş cevap beklendiği gibi çalışıyor, yıldırım hızlı cevabı için teşekkürler :)
Daniel Serodio

17

Kaydırma bölgesinin ayarlanmasını destekleyen terminallerde:

tailf() ( # args: <file> [<number-of-header-lines>]
  trap 'tput csr 0 "$((LINES-1))"' INT
  tput csr "$((1+${2-1}))" "$((LINES-1))"
  tput clear
  {
    head -n"${2-1}"
    printf "%${COLUMNS}s\n" "" | tr ' ' =
    tail -n "$((LINES-1-${2-1}))" -f
  } < "$1"
)

(Böyle bir kabuk kabul zshveya bashayarladığı $COLUMNSve $LINESuç boyutuna göre değişken).


1
Kanka! Bu tanrısal! Üzgünüm, kendimi kontrol edemedim. Aşağıdaki işlevleri uygulamak için beni web sayfalarına, komutlara veya değişkenlere yönlendirebilir misiniz?
Debanjan Basu

1. ile çıkmak q 2. upve downtuşları ile aşağı kaydırın
Debanjan Basu

her seferinde lesskullanmadan kendi kendine piggyback yapmak headve tailher seferinde ekranı yeniden çizmek mümkün müdür ? Ben hala <3 çözüm btw. Henüz doğru olarak işaretlemiyorum çünkü düzenleme yapıyor gibi görünüyorsunuz ve şikayetçi olmanızı istemiyorum; gönül rahatlığı yaratıcılık katili, bana söylendi! :)
Debanjan Basu

@DebanjanBasu Yukarıdaki less -Xyerine kullanabilirsiniz tail -n ...ama "yukarı" tuşu orada başlığı siler.
Stéphane Chazelas

Dediğim gibi, daha iyi fikirleriniz varsa, sadece bana işaret edin, ya da daha iyisi, lütfen cevabınızı daha da değiştirin. Ben çünkü doğru işaretlemek zorunda olan ben başlangıçta sorulan bu soruya cevap verdi. Buradaki fikir, lessdaha genel bir araç haline getirmek için bir başlık ve altbilgi arasında bir ortam oluşturmaktır.
Debanjan Basu

6

Bunu deneyin (yüklemeniz gerekir multitail):

multitail -du -t "$(head -n 1 filename)" filename

veya bir satırdan uzun başlıklar için:

multitail -wh 2 -l "head -n 2 filename" filename

Dosya yerine komut çıkışını takip etmek istiyorsanız:

multitail -wh 2 -l "command | head -n 2" -l command

veya -tuygun şekilde kullanın . unbufferKomut çıktınızın hemen görünmesi için kullanmanız gerekebileceğini unutmayın .

Formlar -Diçin durum satırlarının görüntülenmesini devre dışı bırakmak için kullanabilirsiniz -wh( -tformun amacını bozar).


2

Thor'un cevabı, her iki pencerenin dikey olarak kaydırılmasını sağlayan dikey "kaydırmayı" devre dışı bıraktığından bahsetmedi. Benim için tam çözüm bunu vim'e yapıştırmaktır:

:set scrollopt+=hor
:set scrollopt-=ver
:set nowrap
:1split
:windo set scrollbind

Tercihlerinize bağlı olarak scrolloptdoğrudan :scrollopt=horveya ile ayarlayabilirsiniz :scrollopt=hor,jump. İşte VimDoc var için scrollopt.
Michael

1

Bu kadarıyla var tmux:

#!/bin/bash

tmux new-session -s main -n 'w1' -d
tmux send-keys -t main:w1.0 "tail -f <(head -n1 $1)" C-j
tmux split-window -v
tmux resize-pane -t 0 -y 2
tmux send-keys -t 1 "tail -n+2 $1|less -S" C-j
tmux attach -t main

Bu bir uzantısı user80519 cevabı için tmuxpencere bölme. Farklı kaydet hless.sh, çalıştırılabilir yap ve şu şekilde kullan

hless.sh file
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.