Điểm:0

Cách in các từ cụ thể từ một tệp

lá cờ za

Tôi có một tập tin như thế này

người dùng:[dgalanos] thoát khỏi:[0xa35]
người dùng:[roleary] thoát:[0xa36]
người dùng:[smorgan] thoát khỏi:[0xa37]

Làm cách nào tôi có thể chỉ in tên người dùng như thế này

dgalanos
nhập vai
sorgan

tôi đã thử

người dùng mèo.txt | awk -F ':' '{in $2 > "users3.out"}'

Nhưng nó không cho tôi kết quả chính xác như tôi mong đợi.

αғsнιη avatar
lá cờ cn
không sử dụng [chuyển hướng awk](https://www.gnu.org/software/gawk/manual/html_node/Redirection.html) trong `awk '{print $2 > "users3.out"}' input` khi bạn không cần thiết và bạn thực sự muốn chuyển hướng shell `awk '{print $2}' input > users3.out `.
Điểm:1
lá cờ in

Nếu bạn đặt dấu hai chấm làm dấu tách trường, thì dòng

người dùng:[dgalanos] thoát khỏi:[0xa35]

sẽ được chia thành

người dùng
[dgalanos] thoát khỏi
[0xa35]

Tôi đoán bạn muốn tách ở một trong hai dấu hai chấm hoặc dấu cách, sau đó xóa dấu ngoặc:

Cũng thế, awk mặc định để đọc từ một tập tin, không cần con mèo:

awk -F '[: ]' '{gsub(/[][]/,"",$2); in $2}' user.txt > user3.out

Hoặc bạn sử dụng dấu ngoặc làm dấu tách trường:

awk -F '[][]' '{print $2}' user.txt > user3.out

Dù sao, đối với nhiệm vụ như vậy, tôi muốn tiếng kêu:

grep -Po 'người dùng:\[\K[^]]*' user.txt > users3.out
Điểm:0
lá cờ gr

Cách đơn giản nhất là sửa đổi lệnh của bạn như sau:

awk -F '[' '{in $2}' users.txt | awk -F ']' '{print $1}' > users3.out

  • Tôi đang sử dụng hai đường ống awk để bắt đầu tiên những gì là sau [ và sau đó là những gì sau ]. Dấu phân cách mà bạn quan tâm không phải là dấu chấm phẩy, mà là dấu ngoặc.
  • Đường ống | có nghĩa là đầu ra của lệnh đầu tiên được sử dụng làm đầu vào của lệnh thứ hai. Thư hai awk không hoạt động nếu bạn sử dụng nó một mình, nhưng nó chỉ có ý nghĩa nếu bạn chuyển nó sang lệnh đầu tiên.
  • Khi tạo đường ống, bạn không phải lặp lại tệp đầu vào: vì lý do này trong lần thứ hai awk không có sự lặp lại của tệp đầu vào người dùng.txt. Nếu bạn tò mò muốn sử dụng thứ hai awk một mình, viết: awk -F ']' '{print $1}' users.txt
  • Bạn không cần phải chuyển hướng con mèo xuất ra awk bởi vì awk có thể chấp nhận tệp làm đầu vào
  • Chuyển hướng của bạn đến một tệp đầu ra không được nằm trong awk lệnh, nhưng ở cuối lệnh đầy đủ.

Nếu bạn muốn xem kết quả trong thiết bị đầu cuối nhưng không phải trong tệp, bạn có thể xóa phần đó khỏi >

Đây là một cách thanh lịch hơn để lấy dữ liệu mà không cần đường ống hai awk các lệnh nhưng xác định hai dấu ngoặc là dấu phân cách:

awk -F '[][]' '{print $2}' user.txt > user3.out

tcprks avatar
lá cờ za
Lệnh cho kết quả mong muốn. Tuy nhiên, bạn có thể giải thích tại sao lệnh in thứ hai không in được gì không. awk -F '[' '{in $2}' users.txt | awk -F ']' '{in $1}' . Nó có giống như câu lệnh AND không. nó chỉ in nếu cả hai điều kiện trước/sau đường ống đều thỏa mãn.
Lorenz Keel avatar
lá cờ gr
kiểm tra câu trả lời đã chỉnh sửa của tôi, nó sẽ xóa tan nghi ngờ của bạn.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.