什么linux命令行工具从字符串的开头提取所有字符子字符串?

问题描述:

我有一个带有~100K换行符分隔字符串的文件,没有空格。字符串的长度在2到10之间变化。我的任务是处理每一行,并在同一行上输出从头开始的所有子字符串。例如:什么linux命令行工具从字符串的开头提取所有字符子字符串?

输入字符串为

ABCDEF 

预期的输出是

A AB ABC ABCD ABCDE ABCDEF 

在输出串的顺序并不重要。

编写Python脚本很容易,但我很好奇是否可以使用纯Linux命令行工具。

是的。我可以让你开始。 数字符:

# printf ABCDEF|wc -m 
6 

把它们剪下来:

# echo ABCDEF|cut -c 1-1 
A 
# echo ABCDEF|cut -c 1-2 
AB 

假如你算bash编程为纯Linux的命令行工具,您可以使用计数构建一个循环,并取代过去的范围的说法。

用awk很容易做到这一点,我的经验非常有限。

{ 
for (i = 1 ; i <= length($0) ; i++) 
if (i < length($0)) 
    print "%s\t", substr($0,1,i) 
else 
    printf "%s\n", $0 
} 

的“for”循环越过从字符串中的所有长度和调用每个索引值的SUBSTR()函数。唯一的特例是最后一次迭代 - 必须返回整个字符串。这是为了避免行尾的尾部标签。

刚刚在@Gary Armstrong的回答中添加了一个循环,输出相当漂亮(tr)作为额外的步骤。

#!/bin/bash 
var=ABCDEF 
for ((i=1; i<=${#var}; i++)); do 
echo -n "$var"|cut -c 1-${i}|tr "\n" " " 
done 

输出: -

A AB ABC ABCD ABCDE ABCDEF