сценарий оболочки для чтения и печати части строки

StackOverflow https://stackoverflow.com/questions/1404957

  •  05-07-2019
  •  | 
  •  

Вопрос

Добрый день, участники

У меня есть входной файл, который имеет ряды числовых цифр (около 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,
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top