2 farklı kesme çıkışını tek bir komutta birleştirmek?


15

Aşağıdaki gibi bir dosya var:

1234
ABCD
EFGH

Aşağıdakilere dönüştürmek istiyorum:

2341
BCDA
FGHE

Gerçek dosya 4.000 kelime var, bu yüzden bunu verimli bir şekilde yapmak istiyorum. Komutu kullanmayı denedim cut -c 2-4,1 file.txt, ancak girişle aynı çıktıyı üretiyor. 3 farklı komut kullanabileceğimi düşünüyordum:

cut -c 1 file.txt > temp1.txt
cut -c 2-4 file.txt > temp2.txt
// combine the two with paste or pr

... ama tek bir komutu tercih ederim, çünkü hafif bir değişiklikle birkaç kez çalıştırmam gerekiyor, bu yüzden bir komutu çalıştırmak her seferinde 3 komutu çalıştırmaktan daha az hataya yatkın.

2 kesim ifadesini bir araya getirmenin bir yolu var mı? Gibi bir şey:

cut -c 1 file.txt | pr (cut -c 2-4 file.txt)

Yoksa bunu yapmanın daha iyi bir yolu var mı?

Yanıtlar:


8

Kullanma sed:

sed 's:^\(.\)\(.*\):\2\1:' file.txt

2341
BCDA
FGHE

11

İle cutve pasteayrıca bir astar da yapabilirsiniz:

$ cat file
1234
ABCD
EFGH
$ paste --delimiter=''  <(cut file -c2-4) <(cut file -c1)
2341
BCDA
FGHE

Yapıştır kısayolu için +1. Kolayca anlaşılabilir. :)
Ankit

Sekmeler yerine -d ''--delimiters=''
LIST'teki


3
$ cat test
1234
ABCD
EFGH
$ awk -F "" '{print $2$3$4$1}' test
2341
BCDA
FGHE

Ayırıcıyı verilerinize göre "-F" ile değiştirebilir ve alanların sırasını keyfi olarak düzenleyebilirsiniz.


1

İşte bir yolu perl:

perl -F'' -lane 'print @F[1..@F], $F[0]'

Harf sınırlarında otomatik olarak bölün, birini sola döndürün ve yazdırın.


0

Senaryo tarzında bir alternatif buldum:

~$ cut -c2- file.txt>file2.txt
~$ cut -c1 file.txt>file3.txt
~$ paste -d "" file2.txt file3.txt>file4.txt
~$ rm file2.txt file3.txt

Komut dosyası zincirleri ayrı bir dosyada keser. Sonra yeni bir dosyaya katıl (file4.txt) Ve son olarak yedek dosyaları kaldırır.

llua çözeltisi benim zevkime göre daha temiz.


-1

Rev'i denedin mi?

~$ cat filename | rev


3
Örnek çıktıya bir göz atın. Bu tam tersi değil, iyi düşüncedir. Bunu yeniden çalışmanın bir yolunu bulamıyorsanız, muhtemelen silmelisiniz, böylece aşağı indirilemez ve iş parçacığını karıştırmaz.
slm
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.