Istilah "bidang" sering dikaitkan dengan alat seperti cut
dan awk
. Bidang akan serupa dengan kolom berisi data, jika Anda mengambil data dan memisahkannya menggunakan karakter tertentu. Biasanya karakter yang digunakan untuk melakukan ini adalah Spasi .
Namun seperti kebanyakan alat, ini dapat dikonfigurasi. Misalnya:
- awk =
awk -F"," ...
- akan dipisahkan dengan koma (yaitu , ). - potong =
cut -d"," ...
- akan dipisahkan dengan koma (yaitu , ).
Contoh
Yang pertama ini menunjukkan bagaimana awk
secara otomatis akan dibagi menjadi beberapa spasi.
$ echo "The rain in Spain." | awk '{print $1" "$4}'
The Spain.
Yang ini menunjukkan bagaimana cut
akan membagi spasi juga.
$ echo "The rain in Spain." | cut -d" " -f1,4
The Spain.
Di sini kami memiliki daftar data kolom CSV yang kami gunakan cut
untuk mengembalikan kolom 1 &4.
$ echo "col1,col2,col3,co4" | cut -d"," -f1,4
col1,co4
Awk juga bisa melakukan ini:
$ echo "col1,col2,col3,co4" | awk -F"," '{print $1","$4}'
col1,co4
Awk juga sedikit lebih mahir dalam menghadapi berbagai macam karakter separasi. Di sini berurusan dengan Tab bersama dengan Ruang di mana mereka saling bercampur pada saat yang sama:
$ echo -e "The\t rain\t\t in Spain." | awk '{print $1" "$4}'
The Spain.
Bagaimana dengan tombol -s untuk memotong?
Sehubungan dengan saklar ini, itu hanya memberitahu cut
untuk tidak mencetak baris apapun yang tidak mengandung karakter pembatas yang ditentukan melalui -d
beralih.
Contoh
Katakanlah kita memiliki file ini.
$ cat sample.txt
This is a space string.
This is a space and tab string.
Thisstringcontainsneither.
CATATAN: Ada spasi dan tab di string ke-2 di atas.
Sekarang ketika kita memproses string ini menggunakan cut
dengan dan tanpa -s
beralih:
$ cut -d" " -f1-6 sample.txt
This is a space string.
This is a space
Thisstringcontainsneither.
$ cut -d" " -f1-6 -s sample.txt
This is a space string.
This is a space
Pada contoh ke-2 Anda dapat melihat bahwa -s
switch telah menghilangkan string apa pun dari keluaran yang tidak berisi pembatas, Spasi .
Bidang menurut POSIX adalah bagian mana pun dari garis yang dibatasi oleh salah satu karakter di IFS
, "pemisah bidang masukan (atau pemisah kolom internal )." Nilai default dari ini adalah spasi, diikuti oleh tabulator horizontal, diikuti oleh baris baru. Dengan Bash Anda dapat menjalankan printf '%q\n' "$IFS"
untuk melihat nilainya.
Itu tergantung pada utilitas yang dimaksud, tetapi untuk cut
, "bidang" dimulai di awal baris teks, dan menyertakan semuanya hingga tab pertama. Bidang kedua dijalankan dari karakter setelah tab pertama, hingga tab berikutnya. Dan seterusnya untuk yang ketiga, keempat, ... Semuanya di antara tab, atau antara awal baris dan tab, atau antara tab dan akhir baris.
Kecuali jika Anda menentukan pembatas bidang dengan opsi "-d":cut -d: -f2
akan memberi Anda segalanya antara karakter titik dua (':') pertama dan kedua.
Utilitas lain memiliki definisi yang berbeda, tetapi karakter tab adalah hal yang umum. awk
adalah mundur yang baik jika cut
terlalu ketat, seperti awk
membagi bidang berdasarkan satu atau lebih karakter spasi. Itu sedikit lebih alami dalam banyak situasi, tetapi Anda harus tahu sedikit tentang sintaks. Untuk mencetak kolom kedua sesuai dengan awk
:
awk '{print $2}'
sort
adalah salah satu yang menipu saya. sort
saya saat ini halaman manual mengatakan sesuatu seperti "transisi non-kosong ke kosong" untuk pemisah bidang. Untuk beberapa alasan dibutuhkan beberapa kali percobaan untuk mendapatkan sort
bidang didefinisikan dengan benar. join
tampaknya menggunakan bidang "dibatasi oleh spasi", yaitu awk
dimaksudkan untuk dilakukan secara default.
Moral dari cerita ini adalah untuk berhati-hati, dan bereksperimen jika Anda tidak tahu.