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