倍数の最初の文字のみを印刷

倍数の最初の文字のみを印刷

私は大きなテキストファイルを持っていて、コマンドラインから各行の最初の4、最初の5、最初の8文字を印刷したいと思います。

たとえば、次の行があります。

123456789ab
ABCdefgih55

したがって、出力は次のようになります。

1234
ABCd
12345
ABCde
12345678
ABCdefgh

答え1

for len in 4 5 8; do
    cut -c "1-$len" file
done

これはcut -c、名前付きファイルの各行の最初の部分を切り取るために繰り返し使用されますfile。カットビットの長さはループ変数によって異なりますlen

「一行」の基準に厳密に従う場合:

for len in 4 5 8; do cut -c "1-$len" file; done

または使いやすいシェル機能で:

cut_to_lengths () {
    file=$1; shift
    for len do
        cut -c "1-$len" "$file"
    done
}

それを書く:

$ cut_to_lengths file 4 5 8 1
1234
ABCd
12345
ABCde
12345678
ABCdefgi
1
A

存在するコメントラインが次の場合に出力しないことを指定します。短く切断の長さ。

これを行うには、cutコマンドを次のように変更できますawk

awk -v len="$len" 'length >= len { print substr($0, 1, len) }'

上記のコードをcut -c "1-$len"上記のコマンドで置き換えます。awk

答え2

あなたのサンプル形式が正しく指定されていません。空白が新しい行でなければならないと思いますか?もしそうなら、最も簡単な方法は以下を使用することです。cut

$ cut -c -4 input各行の最初の4文字が印刷されます。必要なだけ多くの文字でこれを繰り返します。

答え3

以下を試してください

for line in `cat input`; do echo ${line} | cut -c 1-4 && echo ${line} | cut -c 1-5 && echo ${line} | cut -c 1-8; done

これは

1234
12345
12345678
ABCd
ABCde
ABCdefgi

関連情報