Làm thế nào để tôi phân tích một chuỗi?


1

Tôi chưa quen với bash và tôi đang tạo một tập lệnh lặp qua các tệp trong một thư mục và dựa trên một phần của tên tệp, thực hiện một cái gì đó với tệp, cho đến nay tôi có điều này:

#!/bin/bash
DIR="/Users/me/Documents/import/*"
for f in "$DIR"
do
  t=??????
  echo "Loading $f into $t..."
done

vì vậy $fsẽ xuất ra một cái gì đó như thế này: /Users/me/Documents/import/time_dim-1272037430173 trong số này, tôi muốn tbằng nhau time_dim, thư mục có thể có độ dài thay đổi và -1272037430173có độ dài cố định (đó là dấu thời gian unix btw).

cách tốt nhất để làm việc này là gì?

Câu trả lời:


4

Chưa được kiểm tra:

t=`basename $f | sed -e 's/-[0-9]\+$//'`

nó gần rồi, nó sẽ trở lạitime_dim-1272037429351
Russ Bradberry

Hãy thử phiên bản đã chỉnh sửa ở trên (được +thay đổi \+theo tài liệu biểu thức chính quy GNU sed)
coneslayer

1
vẫn không hoạt động, nhưng tôi đã nhận được điều này: t=basename $ f | sed 's / - [^ -] * $ //' ``
Russ Bradberry

vấn đề duy nhất tôi gặp phải là tghép nối tất cả trước khi thực hiện tiếng vang, vì vậy tôi nhận được một cái gì đó như: Loading /Users/me/Documents/import/* into date_dim demographic_dim event_log_facts ip_dim location_dim referal_dim time_dimthay vì Loading /Users/me/Documents/import/time_dim-1272037430173 into time_dim...v.v.
Russ Bradberry

1
Ồ, tôi không nghĩ rằng bạn thực sự đang lặp lại các tập tin. Hãy thử xóa các trích dẫn xung quanh $ DIR: for f in $DIR.... Cá nhân tôi sẽ nói DIR=/Users/me/Documents/import(vì vậy $ DIR chỉ là một thư mục, như tên gọi của nó) và sau đó for f in $DIR/*nhưng đó là vấn đề của hương vị.
coneslayer

0

bạn cũng có thể làm:

$ t=`basename $f|tr -d '[0-9-]'`
hoặc là

$ t=`basename $f|gawk -F- '{print $1;}'`

chỉnh sửa: tôi đọc sai câu hỏi


0
What is the best way to go about this? 

cách "tốt nhất", chỉ sử dụng nội bộ bash, :)

$ s=/Users/me/Documents/import/time_dim-1272037430173
$  echo ${s%-*}
/Users/me/Documents/import/time_dim
$ t=${s%-*}
$ echo ${t##*/}
time_dim
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.