Saya tahu cara memilih bidang dari garis menggunakan perintah cut. Misalnya, diberikan data berikut:
a,b,c,d,e
f,g,h,i,j
k,l,m,n,o
Perintah ini:
cut -d, -f2 # returns the second field of the input line
Pengembalian:
b
g
l
Pertanyaan saya: Bagaimana saya bisa memilih penghitungan kolom kedua dari akhir? Pada contoh sebelumnya, hasilnya adalah:
d
i
n
Jawaban:
Balikkan input sebelum dan sesudah
cut
denganrev
:Keluaran:
sumber
cut
tidak dapat mengambil indeks bidang negatif (seperti Python).Coba lakukan ini dengan awk :
Atau menggunakan perl :
Atau menggunakan ruby (terima kasih manatwork):
Atau menggunakan
bash
(terima kasih manatwork):Atau menggunakan python :
sumber
bash
tidak perlu menghitung kolom tetap untuk ini:while IFS=, read -ra d; do echo "${d[-2]}"; done < file.txt
.perl
denganruby
.ruby
tambah,bash
edit.-
atau (tergantung pada lingkungan, shell, atau bagaimana shell dikompilasi), mungkin berisi karakter backslash, makaecho
itu bukan opsi. Mengapa Anda perlucat
berhimpunfile.txt
dengan apa pun sebelum menyuapkannyapython
? Anda perluread -A
bukannyaread -a
diksh93
danzsh
. Subskrip negatif berfungsizsh
tetapi hanya dalam versiksh93
dan terbarubash
. Dalam versi yang lebih lama, Anda dapat menggunakan${d: -2:1}
${d[@]: -2:1}
dalam kalimat terakhir Anda.Menggunakan sed:
Keluaran:
Penjelasan
([^,]*,)*
cocok dengan sejumlah charecter non-koma diikuti oleh koma, yaitu sejumlah kolom.([^,]*)
cocok dengan kolom.(,[^,]*){1}
cocok dengan satu kolom di bagian akhir, jika Anda mengubah kuantifier{1}
ke{2}
cocok dengan kolom kedua dari ujung dll.sumber