如果文本太短,请在文本前加上空格

Prepend spaces to text if too short

我有两组文本文件,我需要在它们前面加上空格,直到每行或每段文本的长度为 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,

在这种情况下,我需要检查每 2 个逗号之间是否有 4 个字符,如果没有,则在前面加上空格直到有。

我正在寻找一种最好使用 Notepad++ 或 shell 脚本来执行此操作的方法。否则,任何其他好的方法也将不胜感激。谢谢

如果第一个片段在名为 text1 的文件中,第二个片段在名为 text2 的文件中:

对于第一组,你可以这样做:

$ awk '{ printf("%3d,\n", [=10=]) }' 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,

第一个任务可以完成 printf:

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

与第二种情况类似,但使用数组而不是标量变量

while read -a numbers ; do
    printf '%5s' "${numbers[@]}"
    echo
done < numbers.txt

试试这个:

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

它基本上将数据通过管道传输到 printf 并根据您的要求进行格式化

为了简单地追加 space,删除 printf 中的 0:

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