다음 명령줄이 있습니다.
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
개행 문자로 끝납니다.