Saya menggunakan zsh pada MacBook Pro, OS X 10.10. Saat saya mengetik perintah tertentu, seperti ini:
cat myfile | awk -F $'\t' '{print $8, $9}' | sort | uniq -c | sort -k1,1n | awk '{if ($1 > 50) sum += $1} END {print sum}'
, lalu bagian dari perintah diulang sebelum output aktual dari perintah. Output dalam hal ini terlihat seperti:
" '{print $8, $9}' | sort | uniq -c | sort -k1,1n | awk '{if ($1 > 50) sum += $1} END {print sum}' : myusername2525
Apakah ada yang tahu cara mendapatkan hasil yang campur aduk? Jenisnya terlihat seperti kerentanan string format atau sesuatu yang mirip dengan saya.
command-line
zsh
Hinton
sumber
sumber
$
padaawk
pernyataan pertama - apa yang ingin Anda capai dengan keseluruhan ituawk -F $'\t' '{print $8, $9}'
? Apakah Anda benar-benar mengharapkan pemisah bidang Anda menjadi tanda dolar diikuti oleh karakter tab? Atau apakah Anda mencoba menggunakan$
untuk menunjukkan awal baris?Jawaban:
Masalahnya adalah
$
padaawk
pernyataan pertama dalam rantai:The
-F
pilihan untukawk
set rekor pemisah untuk masukan Anda. Jika Anda benar-benar mengharapkan pemisah menjadi tanda dolar diikuti oleh karakter tab, Anda harus memindahkan tanda masuk dolar ke tanda kutip tunggal seperti:Meninggalkan bagian
$
luar tanda kutip tunggal berarti ditafsirkan oleh shell sebagai referensi variabel. Inilah yang mengarah pada hasil aneh Anda. Jika Anda tidak mengharapkan tanda dolar di pemisah bidang, hanya satu tab, ubahawk
panggilan ke:Berdasarkan apa yang Anda katakan, yang di atas tampaknya seperti yang Anda inginkan.
sumber