CSVファイルを操作するためのBashスクリプト

CSVファイルを操作するためのBashスクリプト

次のCSVファイルがあります。

    "V1","V2","V3","V4","V5","V6","V7","V8","V9","V10","Class"
65,Female,0.7,0.1,187,16,18,6.8,3.3,0.9,1
62,Male,10.9,5.5,699,64,100,7.5,3.2,0.74,1
62,Male,7.3,4.1,490,60,68,7,3.3,0.89,1
58,Male,1,0.4,182,14,20,6.8,3.4,1,1
72,Male,3.9,2,195,27,59,7.3,2.4,0.4,1
46,Male,1.8,0.7,208,19,14,7.6,4.4,1.3,1

私はV1:age、V2:sex、V8:grade1、V9:grade2の列にのみ興味があります。

V9のデータを3に出力し、出力を性別にソートして、女性データを最初に表示するbashスクリプトを作成したいと思います。

私はbashスクリプトの100%初心者です。シェルからこの出力を取得する方法を知っていますが、bashスクリプトコマンドについてのみこれを考えることができます。

#!/usr/bin/env bash

INPUT=./phpOJxGL9.csv
OLDIFS=$IFS
IFS=','
[ ! -f $INPUT ] && { echo "$INPUT file not found"; exit 99; }

echo Grade2 = 3
echo Age Sex Grade2 Grade1 
echo '************************'


while read V1 V2 V3 V4 V5 V6 V7 V8 V9 V10

do
      if [ $V9 -eg "3" ];
      then
      cut -d',' -f1,2,8,9 | sort -k2 -t','
      fi
      

done < $INPUT
IFS=$OLDIFS

出力は次のようになります。

ここに画像の説明を入力してください。

誰でも助けることができますか?

ベストアンサー1

独自のbashスクリプトを起動することをお勧めします。しかし、正しいツールを使用すると、人生が簡単になる可能性があります。たとえば、次のようになります。入力例にはv9 = 3がないため、コマンドを説明するためにv9> = 3を使用しました。

tail -n+2 your-input | awk -F, '($9>=3){print $1, $2, $8, $9}' | sort -k2 | awk 'OFS="," {print $1,$2,$3,$4}'

65,Female,6.8,3.3
58,Male,6.8,3.4
62,Male,7,3.3
62,Male,7.5,3.2
46,Male,7.6,4.4

注:tail -n + 2はヘッダー行のみを削除します。

列の並べ替えオプションを使用する前に、タブまたはスペース区切り文字を使用する必要があります。

2番目のawkはスペースをコンマで置き換えることです。

おすすめ記事