сценарий оболочки для чтения и печати части строки
Вопрос
Добрый день, участники
У меня есть входной файл, который имеет ряды числовых цифр (около 2000 строк). Я хочу извлечь «вторую-восьмую цифру справа» каждой строки числовой строки в отдельный файл с результатом, разделенным запятая, как показано.
Пример:input.txt
00000000000001303275310752
00000000000001827380519015
00000000000000800081610361
00000000000000449481894004
00000000000000449481894004
00000000000001812612607514
Ожидаемый результат:новыйфайл.txt
7531075,
8051901,
8161036,
8189400,
8189400,
1260751,
Я предполагаю, что для решения моей проблемы можно использовать что-то вроде «sed», но я не совсем уверен, как этого добиться.Я подключен к машине, работающей под управлением Solaris 5.10. Буду признателен, если кто-нибудь сможет дать мне краткое объяснение.
с уважением,
новичок.
Решение
Для ввода фиксированной ширины попробуйте:
cut -c19-26 input.txt | sed 's/$/,/'
то есть извлеките символы с 19 по 26 входного txt, а затем замените конец строки запятой.
Если у вас есть строки переменной длины, вам понадобится что-то немного другое.
Другие советы
Вы можете обрезать ведущие нули с помощью:
sed 's/^0*//g'
Таким образом что-то вроде:
sed 's/^0*//g' input.txt | sed 's/$/,/'
должно сработать.
Пытаться:
perl -pe 's/^.*(\d{7})\d$/$1,/' < input.txt
Или, если вам не нравятся регулярные выражения:
perl -pe '$_ = substr($_,-9,-2) . ",\n"' < input.txt
Это будет работать для любой линии фиксированной или переменной длины.
Вот решение на Python, оно должно быть интуитивно понятным:
$ cat data2
00000000000001303275310752
00000000000001827380519015
00000000000000800081610361
00000000000000449481894004
00000000000000449481894004
00000000000001812612607514
$ cat digits.py
import sys
for line in sys.stdin:
print '%s,' % (line[-9:-2])
$ python digits.py < data2
7531075,
8051901,
8161036,
8189400,
8189400,
1260751,