Bạn không nghĩ rằng nó hơi rõ ràng? Bạn chỉ tạo chuỗi ngẫu nhiên một lần và lưu trữ nó trong ran
biến và sử dụng nó cho tất cả các dòng!
Sử dụng getline
vào một biến từ một đường ống
awk '{
str_generator = "tr -dc '[:alnum:]' </dev/urandom | head -c 6"
str_generator | getline random_str
close(str_generator)
print "name " random_str " - " $0
}' file
Khi bạn sử dụng command | getline var
, đầu ra của lệnh được gửi qua một đường ống đến getline()
và vào biếnvar
.
Cũng lưu ý khi một đường ống được mở cho đầu ra, awk
hãy nhớ lệnh được liên kết với nó và ghi tiếp theo vào lệnh được gắn vào ghi trước đó. Chúng ta cần thực hiện một close()
cuộc gọi rõ ràng của lệnh để ngăn chặn điều đó.
Nếu các dấu ngoặc đơn lồng nhau str_generator
gây ra sự cố, hãy thay thế bằng dấu bát phân tương đương ( \047
)
awk '{
str_generator = "tr -dc \047[:alnum:]\047 </dev/urandom | head -c 6"
str_generator | getline random_str
close(str_generator)
print "name " random_str " - " $0
}' file
tr -dc '[:alnum:]' </dev/urandom | head -c 6
nó, nó sẽ đơn giản hơn và hiệu quả hơn về mặt tính toán để sử dụngpwgen -s 6 1
, hoặc tốt hơn làpwgen -s 6 $(wc -l myfile)
sẽ cung cấp cho bạn chính xác tất cả các chuỗi ngẫu nhiên bạn cần, trong một lần chụp.