2016-06-21 57 views
0

我有一個帶有~100K換行符分隔字符串的文件,沒有空格。字符串的長度在2到10之間變化。我的任務是處理每一行,並在同一行上輸出從頭開始的所有子字符串。例如:什麼linux命令行工具從字符串的開頭提取所有字符子字符串?

輸入字符串爲

ABCDEF 

預期的輸出是

A AB ABC ABCD ABCDE ABCDEF 

在輸出串的順序並不重要。

編寫Python腳本很容易,但我很好奇是否可以使用純Linux命令行工具。

回答

1

是的。我可以讓你開始。 數字符:

# printf ABCDEF|wc -m 
6 

把它們剪下來:

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

假如你算bash編程爲純Linux的命令行工具,您可以使用計數構建一個循環,並取代過去的範圍的說法。

0

用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()函數。唯一的特例是最後一次迭代 - 必須返回整個字符串。這是爲了避免行尾的尾部標籤。

1

剛剛在@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 
相關問題