Сравнение двух столбцов (числовых )в двух разных текстовых файлах

Нет, это связано с тем, что переменная $MyEnvбез кавычек разделяется и обрезается последовательностями символов [1] из переменной IFS, которыми по умолчанию являются пробел (\x20), табуляция(\x09)и новая строка. (\x0a), а затем echoпри записи полей он был разбит на соединенные пробелами(\x20).

Чтобы увидеть эти символы, заключите переменную $MyEnvв кавычки и используйте printfвместоecho -n[2]

$ printf %s "$MyEnv" | hexdump -Cv
...
00000040  0a 09 0a 0d                                       |....|
00000044

Обратите внимание, что обычно вы не можете хранить двоичные данные в переменных среды --двоичные данные могут содержать байты NUL (\0), а значения переменных среды являются строками, завершающимися нулем -. Байты NUL также не работают во внутренних (не -не экспортируемых )переменных bash.

[1] Если символ из IFS не является «пробелом», оболочка может фактически разделить на один символ и создать пустые поля. Полное описание приведено в разделе стандарта Field Splitting .

[2] echoиз стандартной оболочки может интерпретировать некоторые символы обратной косой черты (, например. \nна новую строку и т. д. ), возможно, еще больше испортит вашу переменную.

2
15.04.2020, 23:22
1 ответ

Попробуйте этот awk:

awk '
    NR==FNR{s1[$3]=$1;next}
    {s2[$3]=$1}
    END{
        for (value in s1){
            if (s1[value]!=s2[value]) print s1[value]-s2[value],$2,value
        }
    }
' ram-service1.txt ram-service2.txt | column -t > outfile

columnпросто помещает вывод в удобный формат "диаграммы" и сохраняет его в outfile.

1
19.03.2021, 02:28

Теги

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