Linux 운영 체제(kali)의 모든 라이센스를 캡처하고 이를 올바른 패키지와 연결하는 명령을 작성하려고 합니다. 기본 아이디어는 /usr/share/doc에서 "저작권" 파일을 반복적으로 검색한 다음 이를 검색하고 "^License" 선행 라이센스를 검색하는 것입니다. 각 패키지는 여러 개를 가질 수 있습니다.
모든 패키지 이름을 가져와서 각 라이센스에 대해 쉼표로 구분하여 각 행의 첫 번째 필드에 넣는 CSV를 만들려고 합니다.
내 기본 프로세스: 각 패키지를 나열합니다(완료). 각 행이 발견된 라이선스의 CSV인 목록을 만듭니다. 그런 다음 파일 1과 파일 2를 붙여넣기만 하면 됩니다.
문제는 명령 출력의 줄 바꿈을 쉼표로 바꿔야 하지만 csv 라이센스가 패키지 목록과 일치하도록 xargs의 각 반복 끝에 줄 바꿈을 다시 삽입해야 합니다. 나는 수십 가지 방법을 시도했습니다. 명령 대체를 수행하면 번역이나 에코가 중단됩니다(더 이상 \n
개행 문자로 읽히지 않습니다. 시도해 보았지만 \\n
운이 없었습니다).
이것이 내가 가진 것입니다. xargs 주기마다 개행 문자를 넣는 방법이 필요합니다.
find . -name copyright |xargs -l cat |grep "^License" |tr '\n' ','
따라서 각 xarg 루프 뒤에 삽입되는 항목으로 파이프할 수 있으면 \n
작업이 완료된 것입니다. 변수를 사용하여 이에 대한 for 루프를 작성할 수 있다는 것을 알고 있습니다.
답변1
awk에 문제가 없다면 다음 해결 방법을 시도해 보세요.
find $PWD -name copyright | xargs awk 'BEGIN{ORS=","} FNR==1{print "\n"FILENAME}; $0 ~ /^License/ {print $0}' | sed 's/,$//g' |awk -F',' 'NF>1'