Saya memiliki file teks seperti itu
foo bar baz
1 a alpha
2 b beta
3 c gamma
Saya dapat menggunakan awk untuk mencetak kolom tertentu, seperti 1 dan 3, dengan {print $1, $3}
, tapi saya ingin menentukan kolom yang akan dicetak dengan menentukan header kolom sebagai gantinya, kira-kira seperti {print $foo, $baz}
. Ini berguna jadi saya tidak perlu membuka file dan menghitung kolom secara manual untuk melihat kolom mana yang mana, dan saya tidak perlu memperbarui skrip jika nomor kolom atau pesanan berubah. Bisakah saya melakukan ini dengan awk (atau alat shell lain)?
sumber
print i
danprint $i
danprint
[$ i] pernyataan `dalam loop, dll. Untuk melacak apa yang terjadi jika itu membantu.Anda meminta
awk
, tetapi Anda juga bisa menggunakan alat yang lebih khusus untuk ini:csvtool
.atau
sumber
Dengan asumsi bahwa file tersebut adalah file TSV ("tab separated values"), menggunakan
csvkit
:Output akan CSV diformat dengan benar, tetapi dapat dengan mudah diubah kembali ke TSV:
The
-c
pilihan untukcsvcut
juga dapat mengambil nomor dan rentang, dan juga dapat digunakan untuk mengatur ulang kolom input data (fitur saya sering melewatkan dalam standarcut
utilitas).sumber