İkinci son sütunu veya alanı awk olarak yazdırmak istiyorum. Alan sayısı değişkendir. Kullanabilmem gerektiğini biliyorum $NF
ama nasıl kullanılabileceğinden emin değilim.
Ve bu işe yaramıyor gibi görünüyor:
awk ' { print ( $NF-- ) } '
İkinci son sütunu veya alanı awk olarak yazdırmak istiyorum. Alan sayısı değişkendir. Kullanabilmem gerektiğini biliyorum $NF
ama nasıl kullanılabileceğinden emin değilim.
Ve bu işe yaramıyor gibi görünüyor:
awk ' { print ( $NF-- ) } '
Yanıtlar:
awk '{print $(NF-1)}'
Çalışmalı
awk -F '.' '{print $(NF-2)}'
$(..)
, kullandığınız kabuğa bağlı olarak alt kabukta bir komut çağırmasıdır . Bunun $ (NF-1)
yerine kullanarak bu soruna geçici bir çözüm bulabilirsiniz $(NF-1)
.
Chris Kannon'un kabul edilen cevabına küçük bir ekleme: sadece gerçekten son bir ikinci sütun varsa yazdırın.
(
echo | awk 'NF && NF-1 { print ( $(NF-1) ) }'
echo 1 | awk 'NF && NF-1 { print ( $(NF-1) ) }'
echo 1 2 | awk 'NF && NF-1 { print ( $(NF-1) ) }'
echo 1 2 3 | awk 'NF && NF-1 { print ( $(NF-1) ) }'
)
En basit:
awk '{print $--NF}'
Orijinalin $NF--
işe yaramamasının nedeni, ifadenin azalmadan önce değerlendirilmesi, oysa önek azalmamın değerlendirme öncesinde yapılmasıdır.
int x = ++i
int x = i++
, önek önce artış anlamına gelir; postfix daha sonra artış anlamına gelir (önce atama).
awk ' { print ( $(NF-1) ) }' file
Sonuçtan uzak değildin! Bunu yapar:
awk '{NF--; print $NF}' file
Bu, bir $NF
önceki alanın sayısını içeren alanların sayısını azaltır .
Bazı sayılar üretelim ve 5 kişilik gruplara yazalım:
$ seq 12 | xargs -n5
1 2 3 4 5
6 7 8 9 10
11 12
Sondan bir önceki her satıra yazdıralım:
$ seq 12 | xargs -n5 | awk '{NF--; print $NF}'
4
9
11
Chris Kannon'un awk çözümüne benzer Perl çözeltisi:
perl -lane 'print $F[$#F-1]' file
Bu komut satırı seçenekleri kullanılır:
n
giriş dosyasının her satırı etrafında döngü, her satırı otomatik olarak yazdırmayın
l
işlemeden önce yeni satırları kaldırır ve daha sonra tekrar ekler
a
otomatik bölme modu - giriş satırlarını @F
diziye böler . Boşlukta bölme varsayılanları
e
perl kodunu çalıştır
@F
Otomatik bölme dizisi endeksi başlar [0] awk alanları $ 1 ile başlarken.
$#F
içindeki öğelerin sayısı@F
$F[-2]
Önce değeri azaltır ve sonra yazdırır -
awk ' { print $(--NF)}' file
VEYA
rev file|cut -d ' ' -f2|rev
NF
son alan endeksi, son alanın$NF
değeri