Bash: Tukar lajur teks menjadi satu baris

Katakan kita mempunyai fail teks yang dipanggil distros.txt dengan yang berikut:

archlinux
Debian
ubuntu
kaos
fedora
slackware
gentoo

Dan kami mahu mengubahnya menjadi:

archlinux debian ubuntu kaos fedora slackware gentoo

Untuk mencapai ini kita akan menggunakan a untuk gelung dan gema -n :

for i in `< distros.txt`; do echo -n ${i}" ";done; echo ""

Selesai, ini silap mata 🙂

Ini akan menunjukkan kepada kita hasil yang diinginkan di terminal, jika di sisi lain kita mahu ia disimpan dalam fail .txt yang lain, kita mengarahkan output:

for i in `< distros.txt`; do echo -n ${i}" ";done; echo "" > distros-nuevas.txt

Dan voila 🙂

Tidak apa-apa, saya harap anda menganggapnya berguna. Sah untuk menjelaskan bahawa ia juga dapat dilakukan dengan ungkapan biasa, saya tidak tahu bagaimana ... tetapi, dengan ungkapan biasa anda boleh melakukan hampir semua hahaha.


Kandungan artikel mematuhi prinsip kami etika editorial. Untuk melaporkan ralat, klik di sini.

15 komen, tinggalkan komen anda

Tinggalkan komen anda

Alamat email anda tidak akan disiarkan.

*

*

  1. Bertanggungjawab atas data: Miguel Ángel Gatón
  2. Tujuan data: Mengendalikan SPAM, pengurusan komen.
  3. Perundangan: Persetujuan anda
  4. Komunikasi data: Data tidak akan disampaikan kepada pihak ketiga kecuali dengan kewajiban hukum.
  5. Penyimpanan data: Pangkalan data yang dihoskan oleh Occentus Networks (EU)
  6. Hak: Pada bila-bila masa anda boleh menghadkan, memulihkan dan menghapus maklumat anda.

  1.   Jose Ricardo kata

    lebih mudah:

    kucing distros.txt | xargs -n 100

  2.   ¿ kata

    Sekiranya di .odt saya mempunyai 2 lajur di setiap halaman, mereka membaca seperti ini:

    hlm.1
    col.1 col.2
    hlm.2
    col.3 col.4
    dan lain-lain.

    Bagaimana saya mendapatkan setiap lajur di bawah yang lain?
    kol.1
    kol.2
    kol.3
    kol.4
    dan lain-lain.

  3.   juant kata

    Lebih mudah:

    Sekiranya anda mahu ia dipisahkan oleh tab:
    Anda menulis: tampal -s distros.txt
    Anda dapat: archlinux debian ubuntu kaos fedora slackware gentoo

    Sekiranya anda mahu ia dipisahkan dengan ruang:
    Anda menulis: tampal -s -d »» distros.txt
    Anda dapat: archlinux debian ubuntu kaos fedora slackware gentoo

    Sekiranya anda mahu ia dipisahkan dengan koma:
    Anda menulis: tampal -s -d, distros.txt
    Anda dapat: archlinux, debian, ubuntu, kaos, fedora, slackware, gentoo

    Dengan pes, kucing, awk dan rakan-rakan lain, dengan sedikit kepintaran, anda boleh membuat banyak kombinasi berguna tanpa merumitkan hidup anda.

    Biarkan semuanya berterusan dengan baik, selamat atas anugerah di Portalprogramas!

    1.    penipu kata

      Saya telah menggunakan krim sed, awk, cut, sort, uniq, ringkasnya, tetapi saya tidak pernah memberi perhatian untuk menampal, terima kasih kerana menunjukkan apa yang boleh dilakukan. Slds.

  4.   Tabris kata

    fail kucing.txt | xargs

    keuntungan.

  5.   Cristianhcd kata

    Saya selalu menggunakan excel untuk [transpose] ini ... sangat berguna

  6.   Bruno cascio kata

    Varian lain:

    kucing distros.txt | tr «\ n» »«

  7.   Joaquin kata

    HaHaHa dalam setiap komen, cara yang berbeza untuk melakukan perkara yang sama!

  8.   Jose GDF kata

    Dan untuk melakukan sebaliknya, bagaimana rasanya? Iaitu, menukar sebaris kata yang dipisahkan oleh ruang menjadi lajur.

    1.    juant kata

      Mudah juga, kali ini dengan awk.
      Dengan mengandaikan bahawa medan dipisahkan oleh tab atau ruang, yang paling umum (jika dengan koma atau yang lain, ia mesti diambil kira dan ditunjukkan), dan bahawa fail sekarang mengandungi: archlinux debian ubuntu kaos fedora slackware gentoo

      Oleh kerana awk secara langsung memberi kita bidang yang kita mahukan, kita harus membuatnya secara berulang-ulang menunjukkan kepada kita satu persatu hingga akhir. Terdapat 7 medan kerana ini adalah nilai NF (Bilangan medan). Kami menetapkan pembilang i = 1, sehingga menunjukkan medan pertama kepada kami ($ 1) dan kami harus meningkatkannya satu unit (menggunakan i ++) tanpa melebihi medan terakhir (NF).

      awk '{untuk (i = 1; i <= NF; i ++) {print $ i}}' distros.txt

      1.    Etemenanki kata

        Kaedah yang paling praktikal, mudah diingat dan berfungsi untuk kedua-dua deria ini adalah:
        kucing distros.txt | tr '\ n' '' output Output stdout mendatar (Sudah dibincangkan di atas)
        kucing distros.txt | tr '' '\ n' ← Output stdout menegak

        Salam!

    2.    juant kata

      Pasti penyelesaian Etemenanki, kedua-dua cara, baik jika anda mahukan transformasi sederhana dari baris ke lajur dan sebaliknya.

    3.    Jose GDF kata

      Terima kasih semua kerana memberi maklum balas. Saya akan mempraktikkannya dalam skrip seterusnya yang saya buat.

      Greetings.

  9.   Gato kata

    Dan jika anda hanya melakukan:
    gema $ (cat distros.txt)

  10.   Anson rodriguez kata

    Lebih mudah:
    awk '{printf $ 0 ″ «}' distros.txt

bool(benar)