Відповіді:
Ви можете спробувати:
awk '{ print $3; }' subject.txt | sed -n 's/\([0-9]\{10\}\).*/\1/p'
Ця команда 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 рядках вхідного файлу.
\s
що є більш доречним і простішим не втратити.
Перл на допомогу:
perl -lne 'print /(\d{10})\d*$/' < filename
-n
зчитує рядок введення за рядком-l
додає нові рядки до виводу$
відповідає кінці рядка, перші 10 цифр, що передують будь-яким іншим цифрам до кінця, фіксуються, і /.../
в контексті списку, накладених print
зворотами, якіЯкщо ви вирізаєте лише рішення, яке стерти, спробуйте:
cat /tmp/textfile | sed -n -e '$!d;s/.*\s\([0-9]\{10\}\)[0-9]*$/\1/ p'
замінник працював лише на останньому рядку.
awk '{print substr($3,1,10)}' subject.txt