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.