gsub()
вызовы изменяют переменную, с которой они работают (в данном случае $0
) на месте .Таким образом, один за другим второй дополнительно изменяет вывод первого.
Рассмотрим следующую упрощенную и закомментированную версию вашего скрипта:
#!/bin/bash
awk '
/:/ { # run the below code only for lines that contain :
gsub(/ /, "", $0); # remove all spaces
gsub(/{/, "", $0); # remove opening curly braces
print $1 # print the first column in what's next
}
' <vslist.awk # with stdin from vslist.awk
Отладка с помощью операторов печати(Или, как посмотреть на себя)
Кстати, вы можете сами убедиться, как взаимодействует gsub()
s, добавив дополнительные операторы печати:
#!/bin/bash
awk '
/:/ {
print "Input: " $0;
gsub(/ /, "", $0);
print "After first gsub: " $0;
gsub(/{/, "", $0);
print "After second gsub, the whole line is: " $0;
print $1;
}
' <vslist.awk # with stdin from vslist.awk
С помощью этой контрольно-измерительной аппаратуры вывод для вашего образца ввода будет:
Input: ND_APIxxxxxx:7807 {
After first gsub: ND_APIxxxxxx:7807{
After second gsub, the whole line is: ND_APIxxxxxx:7807
ND_APIxxxxxx:7807
Input: ND_APIxxxxxx:7809 {
After first gsub: ND_APIxxxxxx:7809{
After second gsub, the whole line is: ND_APIxxxxxx:7809
ND_APIxxxxxx:7809
Input: ND_APIxxxxxx:7808 {
After first gsub: ND_APIxxxxxx:7808{
After second gsub, the whole line is: ND_APIxxxxxx:7808
ND_APIxxxxxx:7808
... так, чтобы вы могли четко видеть, как выполняется каждая из операций (первая убирает пробелы, вторая удаляет {
).