web-dev-qa-db-ja.com

列でgrepを使用する方法

Columnコマンドの特定の列にgrepを適用したい。

myfile.txt

3,ST,ST01,3,3,856
3,ST,ST02,4,9,0234
6,N1,N101,2,3,ST
6,N1,N102,1,60,Comcast
6,N1,N103,1,2,92

私のコマンド:

column -s, -t < myfile.txt | grep -w "ST"

ここでは、2列目のパターンSTのみをgrepしたいと思います。これを行う方法 ?

期待される結果:

3       ST            ST01              3            3            856
3       ST            ST02              4            9            0234
3
rajagopalx

カンマを数える特別なRegExを行わなくても、この問題にはawkを使用したほうがよいでしょう。

awk -F, '$2=="ST"'
  • -F,パラメータは、データのカンマに設定される区切り文字を指定します。
  • $2は、2番目の列を参照します。これは、照合するものです。
  • "ST"は、照合する値です。
10
Dan

列2でSTを取得します(-Eおよび{1}はここでは省略できます):

grep -E '^([^,]*,){1}ST[^,]*' file

出力:

 3 ST ST01 3 3 856 
 3 ST ST02 4 9 0234 

列6でSTを取得します。

grep -E '^([^,]*,){5}ST[^,]*' file | column -s, -t

出力:

 6 N1 N101 2 3 ST 
4
Cyrus

awkを使用して、必要な列を選択できます。

column -s, -t < myfile.txt | awk '$2 == "ST"'

シェル変数を使用する場合、

seg="ST"
column -s, -t < $ST_FILE | awk -v var="$seg" '($2 == var)'
0
rajagopalx