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 1
của nó là gì
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 1
của nó là gì
Câu trả lời:
Một awk
chươ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 1
cuố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).
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 đó 1
là sửa đổi tuyên bố trước đó. Hoặc bạn có thể nghĩ 1
là bí danh {print}
, không đúng về mặt kỹ thuật.
Trong thực tế, 1
là 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 1
là điều kiện, luôn luôn đánh giá true
vì nó là khác không. Các action
bị 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}
'
awk -F"=" '{OFS="=";gsub(",",";",$2)}{print}'