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

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

私は大きなテキストファイルを持っていて、コマンドラインから各行の最初の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

おすすめ記事