csvから複数のファイルに情報を抽出する

csvから複数のファイルに情報を抽出する

CSVファイルから情報文字列を抽出して分離し、それを複数の新しいファイルに印刷するのに役立ちます。

分離する必要がある多くの情報を含む大容量ファイルがあります。コードでは、アラバマ州に関するすべての情報を新しいファイルにグループ化し、オクラホマ州に関する情報を別々のファイルにグループ化する必要があります。 Bash(.sh)を使用すると一度にできますか?

1 Sample; Region; Name; Result;
2 "99"; "Alabama", "Joe"; "Ill"
3 "100"; "Alabama", "Mary", "Ill"
4 "101", "Oklahoma", "Joseph", "Ill"

この場合、2つの出力ファイルを作成します。 1つはAlabamaのすべての行を含み、もう1つはOklahomaのすべての行を含みます。 7zipを使用して暗号化するためにこれらのファイルをさらに送信できますか?

答え1

これはうまくいくはずです。

これを使用awkしてファイルを分離して作成し、p7zip暗号化できます。

for f in file; do
    awk ' /Alabama/ { print > "Alamaba.txt" } /Oklahoma/ { print > "Oklahoma.txt" }' $f
    7z a -p -mx=9 -mhe -t7z states.7z Alabama.txt Oklahoma.txt
    #7z a -p -mx=9 -mhe -t7z Alabama.7z Alabama.txt
    #7z a -p -mx=9 -mhe -t7z Oklahoma.7z Oklahoma.txt
done

awk出力ファイルと直接一致して印刷されます。

p7zip7zこの例では、States.7zという暗号化されたファイルが生成されます。

-a: Add files to archive

-p: Prompt for a password

-mx=9: Compression level

-mhe: Encrypt file names

-t7z: Generate a 7z archive 

データを回復するには、次を使用します。

7za e states.7z

出力

cat Alamaba.txt
2 "99"; "Alabama", "Joe"; "Ill"
3 "100"; "Alabama", "Mary", "Ill"

cat Oklahoma.txt
4 "101", "Oklahoma", "Joseph", "Ill"

答え2

すべてのフィールドがスペースで区切られていると仮定すると、次のように試すことができます。

while read SAMPLE REGION REST; do OUT=$(sed s/'[",;]'//g <<<$REGION);echo "$SAMPLE $REGION $REST" >>$OUT.csv; done < all.csv

フィールド間にスペースがない場合は、次の例のようにIFS =を使用して内部フィールド区切り文字を変更できます。

while IFS="," read SAMPLE REGION REST; do OUT=$(sed s/'[",;]'//g <<<$REGION);echo "$SAMPLE $REGION $REST" >>$OUT.csv; done < all.csv

ヘッダー行は別のファイルに属するため、直接コピーする必要があります。

関連情報