명령줄을 xargs로 파이프

명령줄을 xargs로 파이프

다음 명령줄이 있습니다.

curl https://token-api/42 | awk '{ print $0 }'

다음과 같은 출력이 생성됩니다.

{"id":"PX-12345","expiresAtUtc":"2020-07-05T06:55:52","createdUtc":"2019-07-15T06:55:52"}

이는 awk '{ print $0 }'개행 문자가 출력 끝에 추가되도록 하기 위한 것입니다.

이제 동일한 작업을 수행하고 싶지만 users.csv대신 사용자 ID( )의 csv 목록 에 대해 다음과 같은 변형을 시도했습니다 42.xargs

awk -F, '{print "curl https://token-api/$0 | awk \'''\''{ print $0 }\'''\''"}' < users.csv | xargs -P1 -I {} sh -c '{}'

이로 인해 다음 오류가 발생합니다.

awk: cmd. line:1: warning: escape sequence `\'' treated as plain `''
awk: cmd. line:1: {
awk: cmd. line:1:  ^ unexpected newline or end of string

해당 부분을 제거하면 xargs다음과 같은 결과가 나타납니다.

curl https://token-api/$0 | awk '{ print $0 }'

xargs내 문제는 그것을 두 번 사용하는 것 같은데 , $0이 문제를 피하는 방법을 모르겠습니다.

컬의 출력에 개행 문자를 추가하는 또 다른 (더 나은) 방법이 있다면 그것도 도움이 될 수 있습니다. 왜냐하면 그것 없이도 잘 작동하기 때문입니다. 그러나 다음과 같이 무제한 JSON 문서의 긴 목록이 출력으로 표시됩니다.

{"id":"PX-12345","expiresAtUtc":"...","createdUtc":"..."}{"id":"PX-12346","expiresAtUtc":"...","createdUtc":"..."}{"id":"PX-12347","expiresAtUtc":"...","createdUtc":"..."}

답변1

csv 파일의 각 줄에서 명령을 실행하는 것보다 컬 다중 URL 기능을 활용하는 것이 더 쉬울 수 있습니다.

다음과 같이 중괄호 안에 부분 집합을 작성하여 여러 URL 또는 URL의 일부를 지정할 수 있습니다.http://사이트.{일,이,삼}.com

귀하의 csv 파일이 어떻게 생겼는지 잘 모르겠습니다. 모두 한 줄에 있는 것 같나요? 그렇다면 cat컬 명령과 함께 이 파일을 사용할 수 있습니다.

curl "https://token-api/{$(cat users.csv)}"

아직 정리가 필요합니다.

curl "https://token-api/{$(cat users.csv)}" 2>/dev/null | sed '1d;s/--_curl_--.*$//'; echo

sed명령은 첫 번째 URL일 뿐이므로 첫 번째 줄을 제거한 다음 나머지 URL을 제거하여 항목 사이에 유용한 줄 바꿈을 남깁니다. 마지막으로 echo개행 문자로 끝납니다.

관련 정보