Bagaimana cara mendefinisikan pembatas 'tab' dengan 'cut' dalam BASH?


Jawaban:


301

Dua arah:

Tekan Ctrl+ Vlalu Tab.

cut -f2 -d'   ' infile

atau tulis seperti ini:

cut -f2 -d$'\t' infile

10
$ '' - bash'ism, AFAIR
poige

8
Tidak ada yang bekerja di Windows (misalnya, Git Bash) jelas. Gunakan jawaban @ Mikel di sana (pembatas default adalah tab, cukup hilangkan -dargumen).
Ahmed Fasih


4
@poige, itu berasal dari ksh93, bukan bash. Itu didukung oleh ksh93, zsh, bash, mksh, dan FreeBSD sh setidaknya ( itu mungkin membuatnya ke pembalikan utama berikutnya dari spesifikasi standar POSIX untuksh ).
Stéphane Chazelas


191

Tab adalah default.

Lihat halaman cut man .

-d delim
         Use delim as the field delimiter character instead of the tab
         character.

Jadi, Anda harus menulis

cut -f 2

2
Ups tidak memperhatikan garis itu.
Muhammad Hasan Khan

4
Tetapi mungkin selalu lebih aman untuk menyebutkan flag semacam itu secara eksplisit, baik untuk keterbacaan maupun portabilitas. Saya bisa membayangkan beberapa orang mendesain cutuntuk Windows tidak akan mengikuti standar lengkap.
Willem Van Onsem

3
Ini harus diterima jawaban: kode paling sederhana, penjelasan paling sederhana. ya dipaku: youtube.com/watch?v=dpNTHl7y45Y
neuronet

5
Jawaban ini telah mengubah hidup saya
matheeeny

1
@ WillemVanOnsem, jika seseorang menulis versi cutuntuk Windows dan tidak mengikuti spesifikasi POSIX untuknya, tidak ada alasan untuk menganggap bahwa skrip POSIX apa pun akan bekerja dengan sistem itu. Tetap berpegang pada fitur yang ditentukan POSIX. Jangan coba-coba mengizinkan implementasi hipotetis di masa depan yang hipotetis; bukan itu yang dimaksud dengan "portabilitas".
Wildcard

12
awk -F '\t' '{ print $2 }' inputfile

Ini mengekstrak bidang tab-delimited kedua dari setiap baris input dari inputfile.


10

Lebih umum, tanpa memerlukan karakter yang tidak terlihat: Gunakan truntuk mengkonversi pembatas ke format yang dapat ditentukan dengan lebih mudah cut.

$ echo -e "a\tb\tc" |tr '\t' ' ' |cut -d' ' -f2
b

tr adalah alat pencocokan dan penggantian karakter yang sederhana namun kuat.


1
Tetapi bagaimana jika inputnya abc(space)def(tab)ghi? Jawaban Anda akan menghasilkan def, tetapi harus menghasilkan ghi. Demikian pula, jika inputnya adalah ABC(tab)DEF(space)GHI, jawaban Anda akan menghasilkan DEF, tetapi harus menghasilkan DEF(space)GHI.
G-Man

@ G-Man: Pembatas ruang hanyalah contoh. Gunakan pembatas apa pun yang sesuai untuk data Anda - misalnya koma. echo -e "abc\tdef ghi" |tr '\t' ',' |cut -d',' -f2
nobar

... Tapi, ya, jika pembatas harus berupa tab, maka pendekatan saya tidak akan berhasil.
nobar
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.