出力ファイルの2行目の最初の文字が ""かどうか(空であるかどうか)を確認するスクリプトを作成しています。空の場合は「はい」を、そうでない場合は「いいえ」をエコーしたいと思います。私は今これを試しています。テストファイルには次の内容が含まれています。
###############
#
# #############
# #
# ######### # #
# # # #
# ### ##### # #
# # # # #
# # ###########
# #
###############
私のコードは次のとおりです
#!/bin/bash
line2=$(awk 'NR==2 {print; exit}' < test)
blank_check="${line2:0:1}"
if [ "blank_check" == " " ];
then
echo "yes"
else
echo "no"
fi
問題が行にあるようではありません。line2=$(awk 'NR==2 {print; exit}' < test)
これにより、すべてのスペースが削除され、line2が ""の代わりに "#"と同じように終わるためです。
2行目の最初の文字が""かどうかをテストする他のより良い方法はありますか?
ベストアンサー1
シンプル
awk 'NR==2 && /^ / {print "yes"}' test
動作する必要があります。
または:
awk -vbool=no 'NR==2 && /^ / {bool="yes";exit} END {print bool}' test
または:
awk 'NR==2{print ($0~/^ /)?"yes":"no"; exit}' test
はいといいえの両方に固執する場合。
テスト速度は問題ないようです(テストは数回繰り返され、交換され、非常に簡単には表示されませんでした)。
$ printf '%s\n' $(1 5000000) >testa
$ printf '%s\n' " #" >>testa
$ time awk '{print substr($0,1,1)==" "?"yes":"no"}NR==2000000{exit}' testa >/dev/null
run : 0m2.437s sec
$ time awk '{print ($0~/^ /)?"yes":"no"}NR==2000000{exit}' test3 >/dev/null
run : 0m1.746s sec