Amazon s3 バケットは Debian パッケージを別のフォルダに保存します。各フォルダには異なる数のファイルが含まれています。
s3バケット(AWS)からDebianパッケージを呼び出すと、パッケージはスペースで区切られます。これで、スペースで区切られたパッケージのリストを改行で区切られたリスト、つまり1行に1つのパッケージファイルに変換する必要があります。入力行に同じ数のスペースが含まれていません。
各ディレクトリには、異なる数の Debian ソフトウェアパッケージが含まれています。最後に、パッケージを1行ずつ変換した後、すべてのパッケージ(別のフォルダにあります)がフォルダファイルに保存されます。
- 入力例:
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
)に応じて別々のフィールドに分割されるため、プログラムは各行のすべてのフィールド(=パッケージファイル名)を繰り返し、そのフィールドを1行に1つずつ個別に印刷します。 。行にフィールドがない場合、その行も出力されないため、空の行は問題になりません。
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
バラ油、
Debian パッケージを別のフォルダに保存します。各フォルダには異なる数のファイルが含まれています。
実際に、必要な操作がパス情報なしで1行に1つのファイル名で指定されたディレクトリツリー内のすべてのパッケージファイルのリストを作成する場合は、次の手順を実行します。
$ find path/to/your/packages/ -name \*.deb -type f -exec basename {} \;
答え3
使用幸せ(以前のPerl_6)
~$ perl6 -ne '.put for .words;' Jarrar.txt
コマンドラインからファイルを読みたい場合、Rakuはその内容をスペースで区切られたファイルに分割し、1行に1語.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