команда sed розглянути перші 10 цифр з останньої колонки


0

У мене є файл, наприклад, з трьома колонками

12345678910 14567855858855 12345678510750078

Я хочу розглянути лише перші 10 цифр від третьої колонки з sed або awk.

очікуваний вихід:

1234567851

Будь ласка, допоможіть

Відповіді:



1

Ця команда sed надасть вам перші 10 цифр останнього стовпця.
Ваше запитання дещо заплутане у відношенні перших чи останніх 10 чи 14 цифр. :-)
Але на цьому прикладі ви також можете скоригуватись.

$ echo "12345678910 14567855858855 12345678510750078" \ 
| sed -n 's/.*\s\([0-9]\{10\}\)[0-9]*$/\1/ p'

1234567851

Інтерпретація команди (щоб ви могли змінити як потрібно).

 sed -n 's/.*\s\([0-9]\{10\}\)[0-9]*$/\1/ p'
     |   | | | | |          | |       |   ^ print what remains on the matched line
     |   | | | | |          | |       ^^ replace the line with the part of interest
     |   | | | | |          | ^^^^^^^ match for the last column
     |   | | | | |          ^^ mark the end of part we want to print
     |   | | | | ^^^^^^^^^^^ this will match 10 digits at the start of the last column
     |   | | | ^^ start marking the part we want to print
     |   | | ^ start matching the digits after a white-space char
     |   | ^^ pattern begins matching everything up to the part of interest
     |   ^ process only lines that match the given pattern
     ^^ do not print the original input string

Ви можете точно налаштувати це для своїх даних.
Як відомо, через [0-9]*$частину цього правила очікується, що у ваших даних не буде пробілів чи нечислових символів після останнього стовпця або всередині нього.

Оновіть свій коментар.
Хоча цей приклад використовує відлуння вашого єдиного рядка, щоб продемонструвати ваш тестовий випадок,
ви можете запустити команду на весь файл так,

cat input-file.txt | <sed-command-above> > output-file.txt

або

<sed-command-above> input-file.txt > output-file.txt

Перша форма показує, як echoбуде працювати і файл для всього багаторядкового файлу.
Ви також можете зробити короткий тест з перекладеною head input-file.txtна команду sed, щоб побачити, як це працює на перших 10 рядках вхідного файлу.


дякую за вашу відповідь .. але мій файл має близько 100 рядків. один рядок, який я дав як зразок .. тому, будь ласка, дайте мені команду sed, щоб отримати перші 10 цифр останньої колонки, не з відлунням ..
ltps

дякую за вашу відповідь, але коли я запускаю цю команду sed -n 's /.* ([0-9] \ {10 \}) [0-9] * $ / \ 1 / p' inputfile.txt я не отримую будь-який вихід
ltps

коли я запускаю цю команду sed sed -r 's /.* (. {10}) $ / \ 1 /' 1.csv Я отримую вихід, але він розглядає останні 10 цифр з третьої колонки, я отримую вихід як 510750078 для мого вхідного файлу 12345678910 14567855858855 12345678510750078
ltps

Правильно, мій поганий, пробіл у праві загубився під час редагування ... Я змінив те, \sщо є більш доречним і простішим не втратити.
nik

0

Перл на допомогу:

perl -lne 'print /(\d{10})\d*$/' < filename
  • -n зчитує рядок введення за рядком
  • -l додає нові рядки до виводу
  • $відповідає кінці рядка, перші 10 цифр, що передують будь-яким іншим цифрам до кінця, фіксуються, і /.../в контексті списку, накладених printзворотами, які

спасибі за це, але він розглядає останні цифри з зворотного порядку .. Я повинен отримати 1234567851, але вихід дає 510750078
ltps

1
@ltps: О, значить, ви хочете перших десяти цифр останнього стовпця! Ви завжди повинні додавати очікуваний результат до питання, щоб зробити його зрозумілішим. Відповідь оновлено.
choroba

так, я хочу перші десять цифр останнього стовпця. вибачте за це .. буде зрозуміло відтепер
ltps

0

Якщо ви вирізаєте лише рішення, яке стерти, спробуйте:

cat /tmp/textfile |  sed -n -e '$!d;s/.*\s\([0-9]\{10\}\)[0-9]*$/\1/ p'

замінник працював лише на останньому рядку.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.