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 1
sed
답변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