Запустите команду awk и напечатайте $ 1 со скриптом, который получает аргументы - PullRequest
0 голосов
/ 10 января 2019

У меня есть скрипт (называемый test.sh) следующим образом:

#!/bin/bash
for i in "cat myfile | awk -F',' '{print $1}'"; do
     .....

Моя проблема в том, что мой сценарий получает аргументы (./tesh.sh arg1 arg2) и '{print $1}' принимает аргумент сценария (arg1) вместо результата awk, как я могу его решить?

1 Ответ

0 голосов
/ 10 января 2019

Ваша изначальная проблема в том, что вы написали $1 между двойными кавычками.

"cat myfile | awk -F',' '{print $1}'"

переменные bash по-прежнему заменяются своими значениями, если они находятся в строке в двойных кавычках, несмотря на тот факт, что они находятся в одинарных кавычках внутри двойных кавычек. По этой причине $1 заменяется на arg1.

Вторая проблема заключается в том, что вы хотите выполнить команду:

cat myfile | awk -F',' '{print $1}'

, но для этого вам нужно использовать обозначение $( command ) или `command`, однако последнее не рекомендуется, поскольку вложение затруднено.

Итак, ваш цикл for должен выглядеть примерно так:

#!/usr/bin/env bash
for i in $(awk -F ',' '{print $1}' myfile); do
   ...
done
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...