Це просто, коротко і легко писати, розуміти та перевіряти, і мені особисто це подобається:
grep -oE '\S+$' file
grepв Ubuntu , коли викликається -Eабо -P, використовується скорочення \s для позначення символу пробілу (на практиці зазвичай це пробіл або вкладка) і \Sозначає все, що не є одним. Використовуючи квантор+ і якір кінця рядка$ , шаблон \S+$узгоджується з одним або декількома непустими в кінці рядка . Ви можете використовувати -Pзамість -E; значення в цьому випадку однакове, але використовується інший двигун регулярних виразів , тому вони можуть мати різні експлуатаційні характеристики .
Це еквівалентно коментованому рішенням Авінаша Раджа (лише з легшим, компактнішим синтаксисом):
grep -o '[^[:space:]]\+$' file
Ці підходи не працюватимуть, якщо після числа може бути пробіл пробілу . Вони можуть бути модифіковані так, але вони не бачать сенсу займатися цим. Хоча іноді доцільно узагальнювати рішення для роботи в більшій кількості випадків, це не практично так часто, як люди схильні вважати, тому що зазвичай неможливо дізнатися, яким із багатьох різних несумісних способів проблема в кінцевому підсумку може знадобитися бути узагальненими.
Продуктивність іноді є важливою увагою. Це питання не передбачає, що введення дуже велике, і, ймовірно, кожен метод, розміщений тут, є досить швидким. Однак, якщо потрібна швидкість, ось невеликий орієнтир у вхідному файлі на десять мільйонів рядків:
$ perl -e 'print((<>) x 2000000)' file > bigfile
$ du -sh bigfile
439M bigfile
$ wc -l bigfile
10000000 bigfile
$ TIMEFORMAT=%R
$ time grep -o '[^[:space:]]\+$' bigfile > bigfile.out
819.565
$ time grep -oE '\S+$' bigfile > bigfile.out
816.910
$ time grep -oP '\S+$' bigfile > bigfile.out
67.465
$ time cut -d= -f2 bigfile > bigfile.out
3.902
$ time grep -o '[^[:space:]]\+$' bigfile > bigfile.out
815.183
$ time grep -oE '\S+$' bigfile > bigfile.out
824.546
$ time grep -oP '\S+$' bigfile > bigfile.out
68.692
$ time cut -d= -f2 bigfile > bigfile.out
4.135
Я запускав його двічі на випадок, коли замовлення було важливим (як це іноді робиться для важких завдань вводу / виводу) і тому, що у мене не було машини, яка б не робила інших матеріалів у фоновому режимі, які могли б перекривити результати. З цих результатів я, принаймні попередньо, і для вхідних файлів того розміру, який я використовував, роблю наступне:
Оце Так! Проходження -P(для використання PCRE ), а не -G(за замовчуванням, коли не вказано діалект) або -Eзроблено grepшвидше на порядок. Тому для великих файлів може бути краще використовувати цю команду, ніж показана вище:
grep -oP '\S+$' file
ОГО!! cutМетод в відповіді αғsнιη в , є більш ніж на порядок величини швидше , ніж навіть більш швидка версія мого шляху! Він був переможцем і в еталоні pa4080 , який охоплював більше методів, ніж цей, але з меншим вкладом - і саме тому я вибрав його, з усіх інших методів, щоб включити до свого тесту. Якщо важлива продуктивність або файли величезні, я думаю , що слід використовувати метод αғsnιη .cut -d= -f2 filecut
Це також служить нагадуванням про те, що про прості cutта pasteутиліти не слід забувати , і, можливо, їх слід віддавати перевагу, коли це можливо, навіть якщо є більш складні інструменти, такі grepяк часто пропонуються як рішення першого ряду (і що я особисто більше звик до використання).
grep -o '[^[:space:]]\+$' file