Как переместить вторую строку каждой строки, чтобы она начиналась с n-го символа в той же строке - PullRequest
1 голос
/ 18 июня 2020

Ubuntu 16.04
Bash V 4.4

Вот мой файл:

4u76kumtstring5="${ThisLine__4u76kumtstring5}" # this vreis ethees 445h45thb ervexplanation forevrev
wevdssdstring6="${ThisLine__wevdssdstring6}" # this is theerve explanationver for wevdssdstring6 kj
rjjstring7="${ThisLine__rjjstring7}" # thise isder evervthe explanation for rjjstring7 eji
5trstring8="${ThisLine__5trstring8}" # this is ververthe explanation for 5trstring8 k8bf2kl  

Если я использую столбец -t, я получаю что-то вроде этого:

4u76kumtstring5="${ThisLine__4u76kumtstring5}"  #  this   vreis  ethees     445h45thb       ervexplanation  forevrev
wevdssdstring6="${ThisLine__wevdssdstring6}"    #  this   is     theerve    explanationver  for             wevdssdstring6  kj
rjjstring7="${ThisLine__rjjstring7}"            #  thise  isder  evervthe   explanation     for             rjjstring7      eji
5trstring8="${ThisLine__5trstring8}"            #  this   is     ververthe  explanation     for             5trstring8      k8bf2kl

Я хочу, чтобы вторая строка начиналась с n-го символа строки

4u76kumtstring5="${ThisLine__4u76kumtstring5}"               # this vreis ethees 445h45thb ervexplanation forevrev
wevdssdstring6="${ThisLine__wevdssdstring6}"                 # this is theerve explanationver for wevdssdstring6 kj
rjjstring7="${ThisLine__rjjstring7}"                         # thise isder evervthe explanation for rjjstring7 eji
5trstring8="${ThisLine__5trstring8}"                         # this is ververthe explanation for 5trstring8 k8bf2kl

Ответы [ 3 ]

1 голос
/ 19 июня 2020

Предполагая, что в первой name="$variable" части каждой строки не может быть #:

$ awk -v n=60 '{h=$0; sub(/[[:space:]]*#.*/,"",h); sub(/[^#]+/,""); printf "%-*s%s\n", n, h, $0}' file
4u76kumtstring5="${ThisLine__4u76kumtstring5}"              # this vreis ethees 445h45thb ervexplanation forevrev
wevdssdstring6="${ThisLine__wevdssdstring6}"                # this is theerve explanationver for wevdssdstring6 kj
rjjstring7="${ThisLine__rjjstring7}"                        # thise isder evervthe explanation for rjjstring7 eji
5trstring8="${ThisLine__5trstring8}"                        # this is ververthe explanation for 5trstring8 k8bf2kl

Подсчитайте пробелы, чтобы увидеть, правильное ли число 60, массируйте в соответствии с требованиями .

1 голос
/ 18 июня 2020

Попробуйте этот однострочный awk:

awk -v n='60' -F'#' '{printf "%-*s#%s\n",n,$1,$2}' file

Вы можете изменить n='60' на другие значения.

0 голосов
/ 18 июня 2020

Чистый Bash -

c2=$columnYouWantTheHash
while IFS='#' read -r a b; do printf "%-$((c2-1))s%s\n" "$a" "#$b"; done < file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...