File teks saya tidak memiliki pembatas untuk menentukan spasi hanya pemisah, bagaimana cara saya memotong kolom 2 ke file output,
39 207 City and County of San Francisc REJECTED MAT = 0
78 412 Cases and materials on corporat REJECTED MAT = 0
82 431 The preparation of contracts an REJECTED MAT = 0
Jadi output yang saya butuhkan adalah
207
412
432
sumber
cat ... |
jarang diperlukan. Sebagian besar perintah Unix sukacut
mengambil satu atau lebih file input sebagai argumen, miscut -d" " -f5 columns.txt
.seperti kata @jimmij,
awk '{print $2}' file
adalah jawaban paling sederhana.Jika, karena alasan tertentu, Anda tidak ingin menggunakan
awk
dan bersikeras untuk menggunakancut
, Anda dapat menggunakansed
untuk mengonversi setiap instance dari dua atau lebih spasi menjadi satu tab (cut
pembatas default) sebelum memotong menjadi cut:sumber
Anda masih dapat menggunakan spasi tunggal sebagai pembatas, Anda hanya akan memiliki lebih banyak kolom. Tingkatkan nilai yang Anda berikan
cut -d' ' -f
dari 2 menjadi 5, atau mungkin 6. Tingkatkan angka tersebut hingga Anda mendapatkan hasil yang diinginkan.sumber
Di atas satu sangat berguna ketika utilitas Linux seperti awk untuk ekstraksi data tidak berfungsi jika Anda berubah menjadi pengguna "root" di dalam skrip shell seperti di bawah ini:
sumber
awk
tidak akan berfungsi" dalam contoh Anda adalah bahwa dokumen di sini tidak dikutip, yang berarti$2
akan diperluas oleh shell ke parameter posisi kedua. Solusinya adalah mungkin untuk tidak beralih kegrep
perintah tapi baik melarikan diri$
di$2
sebagai\$2
atau untuk sekadar mengutip seluruh dokumen dengan menggunakan<<'EOF'
di tempat<<EOF
. Perhatikan juga bahwa tugas dalam contoh Anda lebih mudah dilakukan olehpgrep
.