ý nghĩa của 1 ở cuối tập lệnh awk là gì


19

Tôi đã đọc kịch bản awk này

awk -F"=" '{OFS="=";gsub(",",";",$2)}1'

Tôi muốn biết chức năng 1của nó là gì


Bạn cũng có thể làmawk -F"=" '{OFS="=";gsub(",",";",$2)}{print}'
GypsyCosmonaut

Câu trả lời:


24

Một awkchương trình là một chuỗi các cặp hành động có điều kiện, các điều kiện nằm ngoài các dấu ngoặc nhọn và các hành động được đặt trong chúng. Một điều kiện được coi là sai nếu nó ước tính bằng 0 hoặc chuỗi rỗng, bất cứ điều gì khác là đúng (các biến chưa được khởi tạo là 0 hoặc chuỗi rỗng, tùy thuộc vào ngữ cảnh, vì vậy chúng là sai). Hoặc là một điều kiện hoặc một hành động có thể được ngụ ý; niềng răng không có điều kiện (như bắt đầu của bạn) được coi là có điều kiện đúng và luôn được thực thi nếu chúng bị đánh và bất kỳ điều kiện nào không có hành động sẽ in dòng nếu và chỉ khi điều kiện được đáp ứng.

Phần 1cuối của tập lệnh của bạn là một điều kiện (luôn luôn đúng) không có hành động, do đó, nó thực thi hành động mặc định cho mọi dòng, in dòng (có thể đã được sửa đổi bởi hành động trước đó trong dấu ngoặc nhọn).


7

Tôi thực sự không thích các loại phím tắt này vì nó làm xáo trộn và đánh lừa cách nó được phân tích cú pháp. Khi bạn đọc một cái gì đó như awk -F"=" '{OFS="=";gsub(",",";",$2)}1', bạn có thể nghĩ rằng đó 1là sửa đổi tuyên bố trước đó. Hoặc bạn có thể nghĩ 1là bí danh {print}, không đúng về mặt kỹ thuật.

Trong thực tế, 1là một tuyên bố hoàn toàn riêng biệt. Bạn có thể tách các câu như thế này:

awk -F"=" '
{OFS="="; gsub(",",";",$2)}
1
'

Mỗi định dạng tuyên bố awk là condition {action}. Nếu không có {action}, thì hành động mặc định là {print}. (Nếu không có condition, thì điều kiện mặc định là true.)

Vì vậy, đây 1là điều kiện, luôn luôn đánh giá truevì nó là khác không. Các actionbị bỏ qua, vì vậy mặc định {print}được thực hiện. Bạn có thể nghĩ về nó theo cách này:

awk -F"=" '
{OFS="="; gsub(",",";",$2)}
1!=0 {print}
'

5

1 có nghĩa là in mọi dòng.

Tuyên bố awk giống như viết:

awk -F"=" '{OFS="=";gsub(",",";",$2);print $0;}'
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.