2016-06-21 27 views
-2

抽出テキスト

ここ
05:21-09:32, 14:21-19:30 

、私は1つの変数、別の21に05を格納したいです、別のものでは09など。すべての価値は私が配列または別々の変数で保存しなければなりません。

私が試してみました:

k="05:21-09:32, 14:21-19:30" 

part1=($k | awk -F"-" '{print $1}' | awk -F":" '{print $1}')                              
part2=($k | awk -F"-" '{print $2}' | awk -F":" '{print $1}') 
part3=($k | awk -F"," '{print $2}' | awk -F":" '{print $1}') 
part4=($k | awk -F"-" '{print $3}' | awk -F":" '{print $1}') 

私はより透明な溶液または短いソリューションを必要としています。

+4

あなたの試行を表示してください。グーグルでは、多くの良い答えが表示されていました – fedorqui

+0

D = "2013/01/17" DAY = $(日付-d "$ D" '+%d') 月= $(日付-d "$ Decho "Month:$ MONTH" echo "Year:$ YEAR" echo "Day:$ DAY" echo "Month:$ MONTH" echo "Year:$ DAY" –

+0

@RaghulMこれは、可能性として 'grep'への接線的な参照以外に、この問題の重複にさえ近づいていません。ここで言及する参照は、ファイル内の既知のテキストをどのように一致させるかについてです。これは、データを別々のフィールドに分割する方法です。どこにも同じものはありません。私はあなたがこれに基づいて閉会に投票しなかったことを願っています。 –

答えて

1

あなたのコードは番号を持っています問題の

  • あなただけ$kとのパイプを標準出力へkの値をすることはできません - あなたはprintf '%s\n' "$k"または、上記の式に引用おそらく少ないポータブルecho "$k"
  • お知らせのような何かをしたいです。それなしで、シェルは、単純な文字列置換のためのAwkのプ​​ロセスは、あなたが抽出したい値ごとに別々のパイプラインを産卵することは非効率的である
  • 過剰である産卵値
  • にワイルドカード展開と空白トークン化を実行します。可能であれば、すべてを一度に抽出してください。 IFS=':-, '; set -- $kよう

何かが一度に$1$2$3、および$4に部品を割り当てます。

2

あなたは-a rrayオプションでreadを使用することができます。

IFS=':-, ' read -ra my_arr <<< "05:21-09:32, 14:21-19:30" 

上記のコードは:-,とスペース上の入力文字列を分割します:

$ echo "${my_arr[0]}" "${my_arr[1]}" "${my_arr[2]}" "${my_arr[3]}" 
05 21 09 32