スペースで区切られた大きな Debian パッケージのリストを改行で区切られたリストに変換する必要があります。

スペースで区切られた大きな Debian パッケージのリストを改行で区切られたリストに変換する必要があります。

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

ベストアンサー1

「空白で区切られた文字列のリストを改行で区切られた文字列のリストに変換する」問題に対する簡単な解決策は非常に簡単です。

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

デフォルトでは、行は「空白」(つまり連続する空白またはタブの数awk)に応じて別々のフィールドに分割されるため、プログラムは各行のすべてのフィールド(=パッケージファイル名)を繰り返し、そのフィールドを1行に1つずつ個別に印刷します。 。行にフィールドがない場合、その行も出力されないため、空の行は問題になりません。

awk複数の入力ファイルを処理できるため、ループも必要ありません。

ただし、基本的な作業はより複雑に見えるため、より包括的な解決策を得るには質問に詳細を提供する必要があります。

おすすめ記事