列コマンドの特定の列にgrepを適用したいと思います。
マイファイル.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
答え1
awk
カンマを計算するために素晴らしい正規表現を使用せずにこの問題を解決するには、これを使用するのが最善です。
awk -F, '$2=="ST"'
- この
-F,
パラメーターは、データのコンマに設定される区切り文字を指定します。 $2
一致させる2番目の列を表します。"ST"
一致させたい値です。
答え2
ST
列2を入力してください(ここでは省略-E
可能{1}
)。
grep -E '^([^,]*,){1}ST[^,]*' file
出力:
3 ST ST01 3 3856 3 ST ST02 4 9 0234
ST
6列に移動:
grep -E '^([^,]*,){5}ST[^,]*' file | column -s, -t
出力:
6 N1 N101 2 3 ST
答え3
を使用してawk
必要な列を選択できます。
column -s, -t < myfile.txt | awk '$2 == "ST"'
シェル変数を使用する場合、
seg="ST"
column -s, -t < $ST_FILE | awk -v var="$seg" '($2 == var)'