2011-08-11 70 views
24

Tôi có một tệp có ba dòng sau đây. Tôi muốn lấy lại đường áp chót, tức là 100.000;8438; 06:46:12.Bash- cách đọc dòng thứ hai đến cuối cùng trong một tệp?

. 
. 
. 
99.900; 8423; 06:44:41 
100.000;8438; 06:46:12 
Number of patterns: 8438 

Tôi không biết số dòng. Làm thế nào tôi có thể lấy nó bằng cách sử dụng một kịch bản shell? Cảm ơn trước sự giúp đỡ của bạn.

Trả lời

75

Hãy thử điều này:

tail -2 yourfile | head -1 
+1

thanks !! nó đã làm việc như tôi muốn – World

+0

Bạn được chào đón! – MattH

+3

Bạn được chào đón nhiều nhất! – MattH

1

Sử dụng này

tail -2 <filename> | head -1 
2

edsed thể làm điều đó là tốt.

str=' 
99.900; 8423; 06:44:41 
100.000;8438; 06:46:12 
Number of patterns: 8438 
' 

printf '%s' "$str" | sed -n -e '${x;1!p;};h'      # print last line but one 
printf '%s\n' H '$-1p' q | ed -s <(printf '%s' "$str")   # same 
printf '%s\n' H '$-2,$-1p' q | ed -s <(printf '%s' "$str")  # print last line but two 
0

Để làm rõ những gì đã được nói:

ec2thisandthat | sort -k 5 | grep 2012- | awk '{print $2}' | tail -2 | head -1 

snap-e8317883 
snap-9c7227f7 
snap-5402553f 
snap-3e7b2c55 
snap-246b3c4f 
snap-546a3d3f 
snap-2ad48241 
snap-d00150bb 

lợi nhuận

snap-2ad48241 
1

Từ: Useful sed one-liners bởi Eric Pement

# print the next-to-the-last line of a file 
sed -e '$!{h;d;}' -e x    # for 1-line files, print blank line 
sed -e '1{$q;}' -e '$!{h;d;}' -e x # for 1-line files, print the line 
sed -e '1{$d;}' -e '$!{h;d;}' -e x # for 1-line files, print nothing 

Bạn không cần phải tất cả họ, chỉ cần chọn một.

0
tac <file> | sed -n '2p' 
0

Một ngắn sed one-liner lấy cảm hứng từ https://stackoverflow.com/a/7671772/5287901

sed -n 'x;$p' 

Giải thích:

  • -n chế độ yên tĩnh: dont tự động in không gian mẫu
  • x: trao đổi không gian mẫu và không gian lưu trữ (giữ dung lượng lưu trữ dòng hiện tại và không gian mẫu trước đó dòng, nếu có)
  • $: trên dòng cuối cùng, p: in không gian mẫu (dòng trước đó, trong trường hợp này là đường áp chót).
Các vấn đề liên quan