返された文字列に変数が割り当てられています。
ytd_wk=$(cat file.csv | grep $(date +'%Y') | tail -1)
最後の2文字を部分文字列で囲みたいです。
ytd_wk=${ytd_wk:(-2)}
1行でこれを達成する方法はありますか?以下を試しましたが、bad substitution
エラーが発生しました。
ytd_wk=${$(cat file.csv | grep $(date +'%Y') | tail -1):(-2)}
ベストアンサー1
以下を試してください。
grep "$(date +'%Y')" file.csv | tail -1 | sed 's/.*\(..$\)/\1/'
他のプログラムの出力や一部のファイルからデータを取得できるため、cat
必要はありません。grep
最後の方法は、1つのコマンドのみを使用し、より速く、システムリソースを消費しにくく、より効率的です。
完璧なソリューション:
ytd_wk=$(grep "$(date +'%Y')" file.csv | tail -1 | sed 's/.*\(..$\)/\1/')
tail
GNU省略を使用できますsed '$!d'
。
grep "$(date +'%Y')" file.csv | sed -r '$!d;s/.*(..$)/\1/'
POSIX:
grep "$(date +'%Y')" file.csv | sed -e '$!d' -e 's/.*\(..$\)/\1/'