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
出力ファイルと直接一致して印刷されます。
p7zip
7z
この例では、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
ヘッダー行は別のファイルに属するため、直接コピーする必要があります。