ああ、スペースを削除してください

ああ、スペースを削除してください

出力ファイルの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

おすすめ記事