Câu hỏi truy cập vào phần tử của trường thông qua awk


Tôi có các cột sau:

_111_   [555]
_222_   [666]
_333_   [777]
_444_   [888]

Tôi muốn truy cập 111 từ _111_. hoặc là 888 từ [888].

Cách truy cập các phần tử trường bằng awk.


2
2017-07-21 10:57


gốc




Các câu trả lời:


thử cái này:

  awk '{gsub("_|\\[|\\]","",$0); print $1 "-" $2;}' prova.txt

lúng túng đọc từng dòng và sử dụng dấu cách "" (khoảng trắng) làm dấu phân tách trường, gsub xóa ký tự: '_' '[' ']', vì vậy $ 1 và $ 2 sẽ chứa mã thông báo không có char không thể truy cập được.

Tập lệnh này sẽ xuất:

  111-555 
  222-666 
  333-777 
  444-888

Nếu bạn truy cập chính xác _111_ và [8888] như mã thông báo đầu tiên và mã thông báo cuối cùng, hãy thử cách này:

  awk '{gsub("_|\\[|\\]","",$0);if (NR == 1) print $1;}END{print $2}' prova.txt

Trong trường hợp này đầu ra sẽ là:

 111
 888

Đây là awk của nhãn hiệu nơi bạn có thể tìm thêm chi tiết.


1
2017-07-21 11:55





Nếu bạn có những dữ liệu đó trong một tệp file.txt

Truy cập 111 dưới dạng,

cat file.txt | tr -d "[]_" | awk 'NR==1 {print $1}'

Truy cập 888 bằng,

cat file.txt | tr -d "[]_" | awk 'NR==4 {print $2}'

trong khoảng truy cập vào các phần tử trường có awk.


1
2017-07-21 11:55