我有一個帶有~100K換行符分隔字符串的文件,沒有空格。字符串的長度在2到10之間變化。我的任務是處理每一行,並在同一行上輸出從頭開始的所有子字符串。例如:什麼linux命令行工具從字符串的開頭提取所有字符子字符串?
輸入字符串爲
ABCDEF
預期的輸出是
A AB ABC ABCD ABCDE ABCDEF
在輸出串的順序並不重要。
編寫Python腳本很容易,但我很好奇是否可以使用純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