Saya ingin menggunakan column
perintah Unix untuk memformat teks. Saya memiliki bidang yang dibatasi oleh tab, tetapi di dalam setiap bidang ada juga spasi. column
batas pada spasi putih (tab dan spasi). Bagaimana saya bisa membuat kolom hanya menggunakan tab sebagai pembatas?
Saya mencoba menentukan tab sebagai pembatas menggunakan:
cat myfile | column -t -s"\t"
column -t -s $'\t'
karena bash tampaknya berpikir'\t'
berarti keduanya\
dant
, tetapi$'\t'
berarti tab harfiah. Bash stinks$'\t'
pembatas make tab. Tapi saya cukup yakin saya lakukanawk -F "\t"
untuk menggunakan tab sebagai pembatas untuk awk. Mengapa itu berfungsi dan tidak di sini untuk kolom?Saya menggunakan yang berikut (hanya berfungsi jika teks Anda tidak mengandung
|
):Ini hanya mengganti tab dengan pipa, kemudian menggunakan kolom dengan pipa sebagai pembatas.
(Saya melakukan ini karena saya tidak melihat apa pun dalam jawaban Stéphane yang bekerja di luar kotak di kulit ikan. Kalau tidak, jawaban Stéphane sepertinya baik.)
sumber
Untuk POSIX, yang
$'...'
dikenal sebagai pelarian ANSI-C, tidak ditentukan.Sebagai gantinya, Anda dapat menggunakan
$(printf '\t')
:$(printf '\011')
dapat digunakan, karena011
(representasi oktal dari desimal 9) adalah kode ANSI untuk karakter tab horizontal:Namun lihat komentar di bawah ini dari Stéphane Chazelas mengapa hal ini mungkin tidak konsisten di seluruh versi shell.
sumber
"$(printf '\t')"
seperti yang ditunjukkan dalam jawaban saya. Catatan yang$'...'
direncanakan untuk dimasukkan dalam versi utama berikutnya dari spesifikasi POSIX.$(printf '\t')
POSIX? Terima kasih!The
-t
adalah untuk memilih jumlah kolom yang Anda inginkan. Membiarkan ini kosong tidak mengubah apa pun. Anda juga ingin ruang putih setelah-s
jadi coba ini:cat myfile | column -s \t
sumber
column
mengisi baris sebelum kolom. Anda mungkin tertarik padapr