Menggabungkan 2 output yang berbeda dalam satu perintah?


15

Saya punya file seperti berikut:

1234
ABCD
EFGH

Saya ingin mengonversinya sebagai berikut:

2341
BCDA
FGHE

File sebenarnya memiliki 4.000 kata, jadi saya ingin melakukan ini secara efisien. Saya mencoba menggunakan perintah cut -c 2-4,1 file.txt, tetapi menghasilkan output yang persis sama dengan input. Saya berpikir saya bisa menggunakan 3 perintah berbeda:

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

... tapi saya lebih suka satu perintah karena saya perlu menjalankannya beberapa kali dengan sedikit modifikasi sehingga menjalankan satu perintah lebih rentan kesalahan daripada menjalankan 3 perintah setiap kali.

Apakah ada cara untuk menggabungkan pernyataan 2 potong menjadi satu? Sesuatu seperti:

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

Atau ada cara yang lebih baik untuk melakukan ini?

Jawaban:


8

Menggunakan sed:

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

2341
BCDA
FGHE

11

Dengan cutdan pasteAnda juga dapat melakukan one-liner:

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

+1, untuk pintasan tempel. Itu mudah dimengerti. :)
Ankit

Anda juga dapat menggunakan -d ''alih-alih menggunakan --delimiters=''kembali karakter dari LIST alih-alih
TAB


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

Anda dapat mengubah pemisah melalui "-F" sesuai dengan data Anda, dan mengatur urutan bidang secara sewenang-wenang.


1

Inilah satu cara dengan perl:

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

Auto-split pada batas huruf, putar satu ke kiri dan cetak.


0

Saya menemukan alternatif dengan cara skrip:

~$ 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

Script memotong rantai dalam file yang terpisah. Kemudian gabung ke file baru (file4.txt) Dan akhirnya menghapus file cadangan.

solusi llua lebih bersih untuk seleraku.


-1

Sudahkah Anda mencoba rev?

~$ cat filename | rev


3
Lihatlah output sampel. Ini bukan kebalikan murni, tetapi pemikiran yang baik. Jika Anda tidak dapat menemukan cara untuk kembali bekerja ini, Anda mungkin harus menghapusnya, hanya agar tidak downvoted dan membingungkan utasnya.
slm
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.