В чем разница между «<<-EOF» и «<

Awkраствор:

awk '/# Begin TRACE A Data/{ f = 1; next }
     /# Done Data \$capture/{ f = 0 }
     NF && f{ gsub(/^P.+=|,| MHz/, ""); print }' file

Выход:

-103.976000  2884.982910  
-103.580000  2884.997456  
-103.748000  2885.012001  
-104.020000  2885.026547  
-103.472000  2885.041092  
-103.720000  2885.055638  
-103.752000  2885.070183  
-103.512000  2885.084729  
-103.664000  2885.099274  
-103.948000  2885.113820  
-103.720000  2885.128365  
-103.480000  2885.142911 
0
01.05.2020, 17:41
2 ответа

<<-EOFбудет игнорировать начальные табуляции в вашем документе, а <<EOF— нет. Таким образом:

cat <<EOF
    Line 1
    Line 2
EOF

будет производить

    Line 1
    Line 2

, а

cat <<-EOF
    Line 1
    Line 2
EOF

производит

Line 1
Line 2
6
28.04.2021, 23:16

Если вы используете <<-EOF, я рекомендую справочную страницу Bourne Shell:

Если, однако, дефис (-)добавляется к <<:

  1. начальные табуляции удаляются из слова перед чтением ввода оболочки (, но после выполнения подстановки параметров и команд в слове );

  2. начальные табуляции удаляются из ввода оболочки по мере его чтения и перед сравнением каждой строки со словом; и

  3. Ввод оболочки считывается до первой строки, которая буквально соответствует результирующему слову, или до EOF.

Таким образом, <<-позволяет сделать отступ содержимого документа здесь для лучшей читабельности.

2
28.04.2021, 23:16

Теги

Похожие вопросы