Input backslash terminal diulang dalam output

2

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.

Hinton
sumber
2
Masalahnya ada $pada awkpernyataan pertama - apa yang ingin Anda capai dengan keseluruhan itu awk -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?
Ian C.
Saya tidak tahu, saya punya beberapa masalah dengan karakter tab lolos beberapa waktu lalu dan beberapa orang memasang tanda dolar sebelum string dengan karakter melarikan diri, jadi saya pikir ini adalah perilaku standar
Hinton
Bagaimanapun, itu agak aneh bahwa ia hanya mencetak setengah string kembali
Hinton

Jawaban:

2

Masalahnya adalah $pada awkpernyataan pertama dalam rantai:

awk -F $'\t' '{print $8, $9}'

The -Fpilihan untuk awkset 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:

awk -F '$\t' '{print $8, $9}'

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, ubah awkpanggilan ke:

awk -F '\t' '{print $8, $9}'

Berdasarkan apa yang Anda katakan, yang di atas tampaknya seperti yang Anda inginkan.

Ian C.
sumber