공백으로 구분된 큰 데비안 패키지 목록을 줄 바꿈으로 구분된 목록으로 변환해야 합니다.

공백으로 구분된 큰 데비안 패키지 목록을 줄 바꿈으로 구분된 목록으로 변환해야 합니다.

Amazon s3 버킷에서는 Debian 패키지를 다른 폴더에 저장합니다. 각 폴더에는 서로 다른 수의 파일이 포함되어 있습니다.

s3 버킷(AWS)에서 Debian 패키지를 호출할 때 패키지는 공백으로 구분됩니다. 이제 공백으로 구분된 패키지 목록을 개행으로 구분된 목록, 즉 한 줄에 하나의 패키지 파일로 변환해야 합니다. 입력 줄에 동일한 수의 공백이 포함되어 있지 않습니다.

각 디렉터리에는 서로 다른 수의 데비안 소프트웨어 패키지가 포함되어 있습니다. 마지막으로 패키지를 한 줄씩 변환한 후 모든 패키지(다른 폴더에 있음)는 폴더 파일에 저장됩니다.

  • 입력 예:
    package1.deb  package2.deb    pacakge3.deb      pacakge4.deb package5.deb
    
  • 원하는 출력:
    package1.deb  
    package2.deb  
    package3.deb  
    pacakge4.deb
    package5.deb
    

다음은 s3 버킷의 다른 폴더에 대해 백그라운드에서 실행되는 함수에 대한 현재 시도입니다.:

function convertSpaceToNewLine(){
    for line in filename; do
       cat $line| grep '.deb$'|tr [:space:] \\t | sed 's/\t\t*/\n/g' >> folder/newfile
    done
}

truncate, 및 와 awk같은 많은 명령에 지쳤습니다 .xargs -n 1sed

답변1

"공백으로 구분된 문자열 목록을 줄 바꿈으로 구분된 문자열 목록으로 변환" 문제에 대한 간단한 해결책은 매우 간단합니다.

awk '{for (i=1;i<=NF;i++) {print $i}}' input_file1 input_file2 ... > output_file

기본적으로 awk줄은 "공백"(즉, 연속 공백 또는 탭의 수)에 따라 별도의 필드로 분할되므로 프로그램은 각 줄의 모든 필드(=패키지 파일 이름)를 반복하고 해당 필드를 한 줄에 하나씩 개별적으로 인쇄합니다. . 행에 필드가 없으면 해당 행도 출력되지 않으므로 빈 행은 문제가 되지 않습니다.

awk여러 입력 파일을 처리할 수 있으므로 루프도 필요하지 않습니다.

그러나 기본 작업은 더 복잡해 보이므로 더 포괄적인 솔루션을 위해서는 질문에 더 많은 세부 정보를 제공해야 합니다.

답변2

bash공백으로 구분된 데이터는 외부 프로그램이 전혀 필요하지 않은 기본 형식으로 쉽게 처리할 수 있습니다 . 음, 저는 cat외부 프로그램에 참여할 자격을 얻고 싶습니다 .

아직:

$ cat << EOF > test.sh 
set -- $(cat)
printf '%s\n' "$@"
EOF
$ chmod 755 test.sh
$ cat << EOF > inputfile 
one two three four five six

seven eight

nine ten eleven

12, 13, 14

15,16

EOF
$ ./test.sh < inputfile 
one
two
three
four
five
six
seven
eight
nine
ten
eleven
12,
13,
14
15,16

장미유,

우리는 데비안 패키지를 다른 폴더에 저장합니다. 각 폴더에는 서로 다른 수의 파일이 포함되어 있습니다.

실제로 원하는 작업이 경로 정보 없이 한 줄에 하나의 파일 이름으로 지정된 디렉터리 트리의 모든 패키지 파일 목록을 만드는 것이라면 다음을 수행하세요.

$ find path/to/your/packages/ -name \*.deb -type f -exec basename {} \;

답변3

사용행복하다(이전 Perl_6)

~$ perl6 -ne '.put for .words;'  Jarrar.txt

명령줄에서 파일을 읽으려는 경우 Raku는 해당 내용을 공백으로 구분된 파일로 나누고 한 .words줄에 한 단어(예: 파일 이름)를 반환할 수 있습니다.

입력 예, 파일 이름 Jarrar.txt(@Jim_L에게 감사드립니다):

one two three four five six

seven eight

nine ten eleven

12, 13, 14

15,16

예제 출력:

one
two
three
four
five
six
seven
eight
nine
ten
eleven
12,
13,
14
15,16

OTOH, 디렉터리에 있는 여러 파일을 보려면 dir()개체의 파일 목록을 반환하는 Raku의 기능을 사용할 수 있습니다..IO

~$ raku -e 'for dir("$*CWD/subdir") {.IO.say};'
"file1.jpg".IO
"file2.png".IO
"Jarrar.txt".IO

dir()필요한 파일의 올바른 위치를 찾으면 test패턴에 따라 필요한 파일만 반환할 수 있습니다.

~$ raku -e 'for dir(test => "*.txt") {.words.join("\n").put};'
one
two
three
four
five
six
seven
eight
nine
ten
eleven
12,
13,
14
15,16

https://docs.raku.org/routine/dir
https://raku.org

관련 정보