Saat bermain dengan awk
saya datang untuk mengeksekusi:
ls -la >> a.txt ; awk {'print $5 $1'} a.txt ;
Ini memberikan output seperti:
53277-rw-------
52347-rw-------
Bagaimana saya bisa mendapatkan ruang antara dua teman output ini?
command-line
text-processing
awk
rɑːdʒɑ
sumber
sumber
ls
. Ini akan menggigit Anda di bagian belakang, cepat atau lambat.print $5 $1
awk {'print $5 $1'} a.txt
). Mereka bertanya bagaimana menempatkan spasi di antara bidang # 1 dan bidang # 5.Jawaban:
Ubah saja baris menjadi
ini harus mencetak output dengan spasi.
Semoga ini membantu.
Sunting:
Seperti yang disarankan oleh McNisse Anda dapat menggunakan printf, yang akan memberi Anda format output yang baik
sumber
printf
berfungsi memberikan kontrol yang lebih baik, khususnya jika Anda ingin nomor Format.printf("%s\t%s\n", $5, $1)
5s
artinya diawk {'printf ("%5s\t%s\n", $5, $1)'}
Teknik awk-spesifik lain, gunakan "pemisah bidang keluaran"
Koma sangat penting di sini.
sumber
$1
untuk pergi ke baris baruCara mudah untuk mendapatkan tab adalah:
sumber
Saya tahu ini adalah utas lama, tetapi saya baru belajar dan menganggap posting ini bermanfaat. Solusi terbaik saya adalah menggunakan gawk untuk menyisipkan spasi di antara variabel untuk Anda.
sumber
gawk
,,mawk
atau lainnyaawk
, mereka semua menyisipkan spasi jika Anda menggunakan koma, yang merupakan jawaban dari kata ini.ls -la | awk '{print $1, $9}'
. Seperti yang dikatakan murugawk
tidak perlu.Untuk menempatkan spasi di antara argumen, cukup tambahkan
" "
, misawk {'print $5" "$1'}
.Namun tidak disarankan untuk mem
ls
- parsing output dari perintah , karena tidak dapat diandalkan dan output untuk manusia, bukan skrip. Oleh karena itu gunakan perintah alternatif sepertifind
ataustat
.Berikut ini contoh menggunakan GNU
stat
:yang akan mencetak Anda hasil yang ramah mesin (dalam bentuk singkat), sehingga Anda bisa mendapatkan apa yang Anda butuhkan. Kemudian gunakan
-c
untuk menggunakan format tertentu, atau gunakanawk
,cut
atauread
untuk mendapatkan kolom yang tepat.Periksa
stat --help
opsi selanjutnya. Misalnya untuk mencetak hari modifikasi, periksa contoh ini .sumber
for i in ls; do $i
).