Output perintah saya adalah seperti:
1540 "A B"
6 "C"
119 "D"
Kolom pertama selalu berupa angka, diikuti oleh spasi, lalu string yang dikutip ganda.
Tujuan saya adalah untuk mendapatkan kolom kedua saja, seperti:
"A B"
"C"
"D"
Saya bermaksud menggunakan <some_command> | awk '{print $2}'
untuk mencapai ini. Tetapi pertanyaannya adalah, beberapa nilai di kolom kedua berisi spasi, yang merupakan pembatas default untuk awk
memisahkan bidang. Oleh karena itu, hasilnya kacau:
"A
"C"
"D"
Bagaimana cara mendapatkan nilai kolom kedua (dengan kutipan berpasangan) dengan bersih?
awk '{$1=""; print $0}'
, tetapi masih memiliki karakter spasi putih terkemuka. Itu bisa dihapus olehsed '/^ //'
. Namun, dapatkah ini dilakukanawk
?Jawaban:
Atau gunakan sed & regex.
sumber
<some_command> | sed 's/.* \(".*"\)/\1/'
Gunakan
-F [field separator]
untuk membagi garis pada"
s:atau untuk input dari pipa
keluaran:
sumber
'{print "\""$2"\""}'
"\"" + $2 + "\""
. Tanda kutip di sekitarnya menunjukkan sesuatu yang akan ditambahkan ke output, dan tanda kutip yang lolos (\"
) sedang dicetak. Untuk membantu memvisualisasikan itu, ini adalah apa yang akan terlihat seperti jika kita ingin menambahkan ruang kosong di sekitar$2
bukan tanda kutip:'{print " "$2" "}'
. Kita juga dapat menambahkan spasi format untuk membuatnya lebih mudah grok:'{print " " $2 " "}'
Jika Anda bisa menggunakan sesuatu selain 'awk', cobalah ini sebagai gantinya
-d adalah pembatas, -f adalah bidang untuk memotong dan dengan -f2- kami bermaksud untuk memotong bidang ke-2 sampai akhir.
sumber
-d
? Terlihat agak aneh dengan cara itu.Ini harus bekerja untuk mendapatkan kolom tertentu dari output perintah "gambar buruh pelabuhan":
Ini akan mencetak kolom ketiga
sumber
Anda tidak perlu awk untuk itu. Penggunaan
read
di Bash shell harus cukup, misalnyaatau:
sumber
Jika Anda memiliki GNU awk, ini adalah solusi yang Anda inginkan:
sumber
sumber
Kemudian, seandainya Anda menamai skrip sebagai co, katakan, lakukan sesuatu seperti ini untuk mendapatkan ukuran file (contohnya Anda menganggap Anda menggunakan Linux, tetapi skrip itu sendiri adalah OS-independen): -
ls -lh | co 5
sumber