GNU/Linux >> Belajar Linux >  >> Linux

Apa yang dimaksud dengan 'bidang' untuk perintah potong?

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.


Linux
  1. 8 tips untuk baris perintah Linux

  2. Nala:Tampilan Depan yang Lebih Cantik untuk Perintah APT

  3. Apa perintah pohon di Ubuntu?

  1. Panduan terminal Linux untuk pemula

  2. perintah cut atau awk untuk mencetak bidang pertama dari baris pertama

  3. Apa tujuan dari cd ` (backtick)?

  1. Pemisah bidang default untuk awk

  2. Apa yang setara dengan perintah updatedb Linux untuk Mac?

  3. Apa yang setara dengan perintah File Linux untuk windows?