使用できる場合cut(1)
(どのタイプのUNIXでも使用できる場合があります)、使用できます
cut -d , -f (n) (file)
必要な列はどこにn
ありますか。
列の範囲 ( 2-3
) または列のリスト( ) を使用できます1,3
。
これにより引用符が残りますが、sedコマンドまたは軽量なものを使用できます。
$ cat sample.csv
"user","admin","security"
"user1","x",""
"user2","","x"
"user3","x","x"
$ cut -d , -f 2 sample.csv
"admin"
"x"
""
"x"
$ cut -d , -f 3 sample.csv
"security"
""
"x"
"x"
$ cut -d , -f 2-3 sample.csv
"admin","security"
"x",""
"","x"
"x","x"
$ cut -d , -f 1,3 sample.csv
"user","security"
"user1",""
"user2","x"
"user3","x"
これは一般的な csv ファイルでは機能しないことに注意してください (エスケープされたカンマを処理しません) が、単純なユーザー名と x の例の形式と同様のファイルでは機能するはずです。
ユーザー名のリストを取得したいだけの場合awk
は、その仕事のために作られたツールであり、以下の答えは繰り返す必要のない良い仕事をします.
ただし、grep ソリューションの方が高速で軽量な場合があります
grep
解決策:
grep '^\([^,]\+,\)\{N\}"x"'
ここN
で、 は N 番目の列で、ユーザーは列 0 です。
$ grep '^\([^,]\+,\)\{1\}"x"' sample.csv
"user1","x",""
"user3","x","x"
$ grep '^\([^,]\+,\)\{2\}"x"' sample.csv
"user2","","x"
"user3","x","x"
そこからcut
、最初の列を取得するために使用できます。
$ grep '^\([^,]\+,\)\{1\}"x"' sample.csv | cut -d , -f 1
"user1"
"user3"
引用符をsed 's/"//g'
取り除くには:
$ grep '^\([^,]\+,\)\{1\}"x"' sample.csv | cut -d , -f 1 | sed 's/"//g'
user1
user3
$ grep '^\([^,]\+,\)\{2\}"x"' sample.csv | cut -d , -f 1 | sed 's/"//g'
user2
user3