ファイル内のすべての行の最後のN文字を印刷するには、cutを使用します。

ファイル内のすべての行の最後のN文字を印刷するには、cutを使用します。

私のファイルには次の内容があります

foobar bar
bar foo foo
bar bar foobar

すべての行の最後の文字(最後の3文字)を取得したいと思います。

目的の出力を取得するには、次のforループ回避策を使用していますが、cutコマンドはこれより良い結果を得ることができるようです。 Cutで同じことをする方法はありますか?

$ cat test.sh
FILE=$1
echo "Last chars:"
for i in $(cat $FILE)
do
  echo ${i: -1}
# OR echo $i |tail -c 2
done

echo
echo "Last 3 chars:"
for i in $(cat $FILE)
do
  echo ${i: -3}
# OR echo $i |tail -c 4
done


$ sh test.sh
Last chars:
r
r
r
o
o
r
r
r

Last 3 chars:
bar
bar
bar
foo
foo
bar
bar
bar

答え1

cut1行自体には「最後のN文字」という概念はありません。ただし、revこれをプログラムと組み合わせると、各行を反転できます。最初N文字を入力し、結果を反転して元の順序に復元します。

 rev | cut -c 1-3 | rev

答え2

cutGNUシステムを使用している場合は、シングルバイト文字でのみ機能する状況を避けたい場合があります。

あなたが使用できるsed

sed -n '/^.*\(...\)$/\1/p' < file

(一部の実装では、3文字未満の行とテキストではなく行をスキップします。)

または、3文字未満の文字を含む行でその内容のみを印刷します。

sed -n 's/.\{0,3\}$/\
&/; s/^.*\n//p' < file

関連情報