что такое awk '{print $ 1 + 0.45 "" $ 2 "" $ 3}' file1> file2?

Что означает awk '{print $1+0.45 " " $2 " " $3 }' positionXYZ > positionX0.45YZ означает? Означает ли это изменение строки в первом файле и добавление новых данных во второй?

Давайте сломаем это. awk '{foo}' file будет применять выражение foo к каждой строке file и распечатать результат на терминале (стандартный вывод). awk разбивает свои входные строки на пробел (по умолчанию) и сохраняет каждое поле как $1 , $2 и т. д.

Итак, текущее выражение, которое вы используете, означает: прочитайте каждую строку ввода, добавьте 0,45 к значению первого поля, а затем распечатайте это поле, а также второе и третье. Это проще всего объяснить простым примером:

 $ cat file.txt 10 20 30 40 50 60 70 80 $ awk '{print $1+0.45 " " $2 " " $3 }' file.txt 10.45 20 30 50.45 60 70 

Итак, как вы можете видеть, скрипт awk добавил 0.45 в первое поле каждой строки, а затем напечатал его вместе со вторым и третьим. Четвертый был проигнорирован, так как вы не сказали ему распечатать $4 .

Следующий бит не имеет ничего общего с awk , символ > предназначен для перенаправления вывода и используется оболочкой (bash или zsh или тем, что вы используете). В общем случае command > file сохранит вывод command в файле file перезаписывая содержимое файла, если он существует, и создав его, если он этого не сделает.

Собирая все вместе:

 $ ls file.txt $ cat file.txt 10 20 30 40 50 60 70 80 $ awk '{print $1+0.45 " " $2 " " $3 }' file.txt > file2.txt $ ls file2.txt file.txt $ cat file2.txt 10.45 20 30 50.45 60 70 

file2 добавляет 0.45 к каждому значению первого столбца (x'es), столбцы 2 и 3 копируются как есть, все остальное в строке игнорируется.

awk читает каждую строку файла1 и запускает скрипт между {}

Сценарий запускается на каждой строке, белые разделимые поля с разделителями назначаются позиционным параметрам $ 1, $ 2 $ 3, …

Параметры печатаются, кроме $ 1 добавляется 0,45