Saya punya file teks:
a aa aaa b bb bbb c cc ccc
d dd ddd e ee eee f ff fff
g gg ggg h hh hhh i ii iii
j jj jjj
Bagaimana saya bisa memprosesnya dan mendapatkan file 2 kolom seperti ini:
a aa
aaa b
bb bbb
c cc
ccc d
dd ddd
e ee
eee f
ff fff
g gg
ggg h
hh hhh
i ii
iii j
jj jjj
Atau file tiga kolom seperti ini:
a aa aaa
b bb bbb
c cc ccc
d dd ddd
e ee eee
f ff fff
g gg ggg
h hh hhh
i ii iii
j jj jj
Saya lebih suka mendapatkan solusi awk tetapi solusi lain juga disambut.
text-processing
awk
Hanya seorang pembelajar
sumber
sumber
$1
sebagai format stringprintf
?"%s", ...
. Diperbaruiawk
perintah di jawaban Anda yang lain untuk pertanyaan ini.Letakkan setiap bidang pada baris dan setelah kolom.
Setiap bidang pada satu baris
tr
grep
sed
atau lebih portabel:
awk
atau
Berbentuk kolom
tempel
Untuk 2 kolom:
Untuk 3 kolom:
dll.
sed
Untuk 2 kolom:
Untuk 3 kolom:
dll.
xargs
Saat
xargs
digunakan/bin/echo
untuk mencetak, berhati-hatilah bahwa data yang kelihatannya seperti opsiecho
akan ditafsirkan demikian.awk
pr
atau
kolom (dari paket autogen)
Output khas:
sumber
xargs
panggilan saluranecho
atauprintf
?xargs
panggilan/bin/echo
secara defaultxargs
yang sepertinya pilihan/bin/echo
menyebabkan masalah ... Saya menambahkan peringatan.sumber
Seperti yang ditunjukkan Wildcard, ini hanya akan berfungsi jika file Anda diformat dengan baik, karena tidak ada karakter khusus yang akan ditafsirkan oleh shell sebagai gumpalan dan Anda senang dengan aturan pemisahan kata standar. Jika ada pertanyaan tentang apakah file Anda akan "lulus" tes itu, jangan gunakan pendekatan ini.
Satu kemungkinan akan digunakan
printf
untuk melakukannya sepertiItu akan melakukan pemisahan kata pada konten
your_file
dan akan memasangkannya dan mencetaknya dengan tab di antaranya. Anda bisa menggunakan lebih banyak%s
string format dalamprintf
untuk memiliki kolom tambahan.sumber
(ganti 4 dengan jumlah kolom)
sumber
rs
Utilitas BSD (membentuk kembali):0 2
adalah baris dan kolom . Menentukan0
berarti "menghitung baris secara otomatis dari kolom".sumber
Pendekatan skrip python.
Ide dasar di sini adalah untuk meratakan semua kata dalam teks Anda menjadi satu daftar, dan kemudian mencetak baris baru setelah setiap item kedua (itu untuk pengelompokan ke dalam dua kolom). Jika Anda ingin 3 kolom, ubah
index%2
keindex%3
Output sampel:
Versi tiga kolom (seperti yang disebutkan di atas, hanya
index%3 == 0
diubah)sumber