Скопируйте цифры из каждой строки с позиции 2-4 в позицию с 8 по 10 для каждой строки с помощью сценария оболочки

#bash #shell

#bash #оболочка

Вопрос:

Я пытаюсь создать сценарий оболочки, который считывает приведенный ниже входной файл и добавляет цифры, которые присутствуют с индексом 2-4 в каждой строке, к индексу с 8 по 10 в каждой строке.

Входной файл (input.txt )

 1234567
1278980
54279
  

Выходной файл: (обратите внимание, что цифры в позиции 2-4 в каждой строке были добавлены к позиции 8-10 в той же строке)
Output.txt

 1234567234
1278980278
54279  427
  

Мой текущий код показан ниже. В этом коде я могу извлекать только цифры с индексом 2-4 каждой строки, но не могу добавить их с индексом от 8 до 10 для каждой строки в том же файле.

 awk '{val=substr($0,2,3)} (val 0)>=0 {print $0}' input.txt  > filtered_digits.txt
  

Может кто-нибудь помочь мне достичь этого в том же коде сценария?

Спасибо вам всем.

Комментарии:

1. (val 0)>=0 ? Почему? index 2 to 4 ваш вывод предполагает, что вам нужны 3 символа, ваш awk предполагает, что вам нужны 2 символа. Итак, индекс от 2 до 4 включительно?

2. Да, с индексом 2-4 включительно. Я обновил код в вопросе. Я хочу иметь возможность обновлять то же самое input.txt файл и создайте output.txt файл

Ответ №1:

Это просто:

 awk '{val=substr($0,2,3)} {print $0 val}'
awk '{print $0 substr($0,2,3)}'
# even just (with nonempty input):
awk '$0 = $0 substr($0,2,3)'
  

или с помощью sed:

 sed 's/(..(...)..)/12/'
  

Но если у меня есть строка всего из 4 символов

Вы могли бы выровнять по левому краю $0 с пробелами до 7:

 awk '$0 = sprintf("%-7s", $0) substr($0,2,3)'
  

Комментарии:

1. Я хочу добавить его, начиная с индекса с 8 по 10. Я не уверен, что понимаю, как ваш код учитывает это? Не могли бы вы, пожалуйста, объяснить?

2. Не могли бы вы ответить?

3. Ваш входной файл содержит 7 символов, поэтому я просто добавляю его.

4. Но если у меня есть строка всего из 4 символов, тогда метод суффикса не будет работать. правильно? Это проблема, с которой я также сталкиваюсь, поскольку я также хочу сделать интервал в awk cmd

Ответ №2:

Если вы хотите отформатировать свой вывод, например

 printf "%-7s%sn" 12345 123
12345  123
  

Вы можете использовать

 sed -r 's/.(..).*/printf "%-7s%sn" "amp;" "1"/e' input.txt