2016-06-21 12 views
0

〜100Kの改行文字で区切られた文字列にスペースを含まないファイルがあります。文字列の長さは2から10まで変化します。私の仕事は、すべての行を処理し、すべての部分文字列を最初から同じ行に出力することです。例えば:linuxのコマンドラインツールは、文字列の先頭からすべての文字部分文字列を抽出しますか?

入力文字列が

ABCDEF 

期待出力が出力にサブストリングの

A AB ABC ABCD ABCDE ABCDEF 

オーダーであるが重要ではありません。

Pythonスクリプトを書くのは簡単ですが、普通のLinuxコマンドラインツールで可能かどうかは不思議です。

答えて

1

はい。私はあなたを始めさせることができます。 文字カウント:

# printf ABCDEF|wc -m 
6 

はそれらを切り取り:あなたはプレーンなLinuxのコマンドラインツールとしてbashのプログラミングをカウント仮に

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

は、あなたは、カウントを使用してループを構築し、最後の範囲引数を置き換えることができます。

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 
関連する問題