как получить слова после двоеточия (:)с помощью awk из файла

Провозившись с этим целый день, я понял это почти сразу после того, как задал вопрос здесь...

Я смог исправить это, включив новую строку в критерии поиска команды perl. похоже, что он просто оставил новую строку, которая уже была в строке после закрывающего тега xml, а затем добавил дополнительную из команды «кошка».

perl -i -p0e 's;<values>.*<\/values>\n;`cat replace.xml`;sge' test.xml

Изменить :Благодаря ответу mosvy я нашел другое решение, которое будет работать, если заменяемый текст не имеет завершающей новой строки, как это было в моем случае:

perl -i -p0e 's;<values>.*<\/values>;`head -c -1 replace.xml`;sge' test.xml

использование head вместо cat предотвращает вывод дополнительной новой строки

0
21.04.2021, 18:53
2 ответа

Вы можете использовать что-то вроде:

VARIABLE=$(awk -F\: '{print $4}' input_file)

это назначит 4-й параметр переменной с именемVARIABLE

1
28.04.2021, 22:51

Предполагая, что использование awkне является обязательным, используйте функции Bash, чтобы избежать использования внешнего процесса:

IFS=':' read _ _ myCol3 myCol4 _ < myFile

_является допустимым именем переменной, но принято использовать его как точку отбрасывания. Последний _получает все дополнительные поля.

Я заметил, что данные вашего примера имеют пять значений, а не 4, которые вы указали.

Редактировать :Чтобы установить несколько значений массива, извлеченных из файла (, в этом случаестрока 11 моего файла пароля):

$ myArray+=( $( awk < /etc/passwd '-F:' 'NR == 11 { print $1, $3, $6; }' ) )
$ declare -p myArray
declare -a myArray=([0]="uucp" [1]="10" [2]="/var/spool/uucp")
$ echo "${myArray[1]}"
10
0
28.04.2021, 22:51

Теги

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