Добавить пробел к тексту, если он слишком короткий - PullRequest
1 голос
/ 03 мая 2020

У меня есть два набора текстовых файлов, к которым нужно добавить пробелы, пока каждая строка или фрагмент текста не будет иметь длину 4 символа.

Первый набор текстовых файлов выглядит следующим образом:

0,
0,
0,
0,
0,
0,
251,
251,
251,
0,
0,
0,
0,
12,
12,
12,

Я хочу добавить пробелы в начале каждой строки, пока все они не будут длиной 4 символа.

Второй набор выглядит следующим образом:

0, 0, 0, 251, 251, 251, 0, 0, 0, 0, 12, 12, 12,
0, 0, 251, 0, 0, 0, 0, 0, 12, 12, 12, 12, 0,

В этом случае Мне нужно проверить, есть ли 4 символа между каждыми 2 запятыми и, если нет, добавить пробелы, пока не будет.

Я ищу способ сделать это предпочтительно с помощью Notepad ++ или сценариев оболочки. В противном случае, любые другие хорошие способы сделать это также будут оценены. Спасибо.

Ответы [ 3 ]

3 голосов
/ 03 мая 2020

Первая задача может быть выполнена с помощью printf:

while read line ; do
    printf '%4s\n' "$line"
done < lines.txt

Аналогично для второго случая, но с использованием массива вместо скалярной переменной

while read -a numbers ; do
    printf '%5s' "${numbers[@]}"
    echo
done < numbers.txt
1 голос
/ 03 мая 2020

Попробуйте:

   for i in $(cat bashdata.txt);do printf "%03d,\n" "${i::-2}";done

В основном данные передаются в printf и форматируются в соответствии с вашими требованиями

output

To добавьте просто пробел, удалите 0 в printf следующим образом:

for i in $(cat bashdata.txt);do printf "%3d,\n" "${i::-2}";done

output2

1 голос
/ 03 мая 2020

Если первый фрагмент находится в файле с именем text1, а второй - в файле с именем text2:

Для первого набора вы можете выполнить:

$ awk '{ printf("%3d,\n", $0) }' text1 # It'd be more modular to get the left-pad whitespace count in awk
  0,
  0,
  0,
  0,
  0,
  0,
251,
251,
251,
  0,
  0,
  0,
  0,
 12,
 12,
 12,

Для второго

$ column -t text2
0,  0,  0,    251,  251,  251,  0,  0,  0,   0,   12,  12,  12,
0,  0,  251,  0,    0,    0,    0,  0,  12,  12,  12,  12,  0,
...