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
複数の入力ファイルを処理できるため、ループも必要ありません。
ただし、基本的な作業はより複雑に見えるため、より包括的な解決策を得るには質問に詳細を提供する必要があります。