2017-07-30 13 views
0

私のクエリは11個のカラムを持つcsvファイルを持っています。数字が7個のカラムを持つレコードを抽出したいのですが、7番目のカラムはawkコマンドしかし、うまくいきませんでしたUnixのカラムをフィルタリングするにはどうすればいいですか?

+1

、すでに試してみました何と一緒に予想される出力を持ついくつかのサンプルデータを投稿してください。 –

答えて

1

私が理解すれば、あなたは数字として7列の行が欲しいですか?

これを行うにはgrepを使用できます。セパレータとして '' で:あなたの場合

grep ".*,.*,.*,.*,.*,.*,[0-9]*,.*" yourfile.csv 

あなたは7列のみ、使用カットしたい場合(-d =>区切り文字を、フィールドを選択-f)

cat yourfile | cut -d, -f7 | grep "[0-9]*" 
0

私は知りません具体的にはbashコマンドを探していますが、Pythonのようなスクリプト言語を使うことをお勧めします。 Pythonでそれを行うための1つの方法は次のとおりです。

count = 0 
prunedColumns = [] 
with open('FILENAME','r') as f: 
    for line in f: 
     count = 0 
     for entry in line.split(','): 
      try: 
       float(entry) 
       count += 1 
      except ValueError: 
       continue 
      if count == 7: 
       prunedColumns.append(line) 
print(prunedColumns) 
+0

のファイルがあるとしましょう: Abcの; 123; AAAA; 789 PQR; 567; 5555; 999 エクシーズ; 888; BBBB; 6453 LMN; 777; 5555; 8989 私は出力を期待しています列2(列3は数値のみ) – shikha

0

まずいくつかのテストデータ:AWKで

$ cat file 
1 2 3 4 5 6 7 a b c d # seven numbers, a hit 
1 2 3 4 5 6 a b c d e # six, a miss 
1 2 3 4 5 6 7 8 a b c # eight, a miss 
1 2 3 4 5 6 7a b c d e # seven, a hit 

$ awk '{ 
    for((i=1)&&c=0;i<=NF;i++) # check each field 
     if($i~/[0-9]+/)  # if there are numbers in it 
      c++    # iterate counter 
} 
c==7       # if there are 7 fields, print record 
' file      
1 2 3 4 5 6 7 a b c d # seven numbers, a hit 
1 2 3 4 5 6 7a b c d e # seven, a hit 
0

ジェームス・ブラウンと同じINPUT_FILEを使用して、ここにもう一つのアプローチを試してみてください彼のポストで使用されています。

awk '{val=$0;if(gsub(/[0-9]+/,"",val)==7){print}}' Input_file 

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

1 2 3 4 5 6 7 a b c d # seven numbers, a hit 
1 2 3 4 5 6 7a b c d e # seven, a hit 
+0

一部の行の数値と他の列の文字列を持つ7列目を探しています – shikha

+0

@shikha:コードサンプルでInput_fileのサンプルと予想される出力を追加してください私たちがあなたを助けてくれるのは本当に役に立ちます。 – RavinderSingh13

0
cat file.csv | awk '{print $7}'| egrep -v [a-z]+ 
関連する問題