Добавление букв и символов в столбец с помощью awk или sed?

Проблема в том, что ваша звездочка интерпретируется оболочкой ДО того, как она будет передана в find в качестве аргумента.

Т.е. если у вас есть файл типа script.sh в текущем рабочем каталоге, откуда вы выполняете find, ваша команда будет выглядеть как это:

#command you type:
find . -name *.sh
#command the shell creates:
find . -name script.sh

Так что в вашем случае это первая соответствует *. sh в a_root_dir , как интерпретируется оболочкой, и ваша команда буквально такова:

find . -name run.sh

Что вам нужно сделать, это использовать жесткие кавычки, чтобы подавить оболочку, расширяющую звездочка перед выполнением find :

find . -name '*.sh'
1
07.10.2016, 19:55
2 ответа

Вкратце, однострочный:

awk '$1=$1"N-H"'
2
27.01.2020, 23:19

С sed :

sed -E 's/^([^[:blank:]]+)/\1N-H/' file.txt
  • ([^ [: blank:]] +) соответствует первому полю ( ^ ) и помещается в только захваченную группу

  • В замене NH добавляется к первому полю, \ 1N-H

В awk :

awk '{sub("$", "N-H", $1)}; 1' file.txt 
  • sub ("$", "NH", $ 1) замените конец первого поля ( $ ) с NH , это обязательно означает операцию добавления, вместо

  • 1 - это просто заполнитель для true , так что (измененная) запись печатается

Пример:

% cat file.txt                               
A3 124.406526 8.281803
A3' 125.000684 8.389677
K4 123.072842 8.166373
K4' 120.092553 8.269080

% sed -E 's/^([^[:blank:]]+)/\1N-H/' file.txt
A3N-H 124.406526 8.281803
A3'N-H 125.000684 8.389677
K4N-H 123.072842 8.166373
K4'N-H 120.092553 8.269080

% awk '{sub("$", "N-H", $1)}; 1' file.txt    
A3N-H 124.406526 8.281803
A3'N-H 125.000684 8.389677
K4N-H 123.072842 8.166373
K4'N-H 120.092553 8.269080
4
27.01.2020, 23:19

Теги

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