Một đơn giản, mặc dù awk giải pháp -less trong bash:
while IFS=, read -r a a a b; do echo "$a"; done <inputfile
Nó hoạt động nhanh hơn cho các tập tin nhỏ (< 100 dòng) sau đó awk vì nó sử dụng ít tài nguyên (tránh gọi đắt fork
và execve
cuộc gọi hệ thống).
EDIT từ Ed Morton (xin lỗi vì hi-Jacking câu trả lời, tôi không biết nếu có một cách tốt hơn để giải quyết vấn đề này):
Để đặt để nghỉ ngơi huyền thoại mà shell sẽ chạy nhanh hơn awk cho file nhỏ:
$ wc -l file
99 file
$ time while IFS=, read -r a a a b; do echo "$a"; done <file >/dev/null
real 0m0.016s
user 0m0.000s
sys 0m0.015s
$ time awk -F, '{print $3}' file >/dev/null
real 0m0.016s
user 0m0.000s
sys 0m0.015s
tôi hy vọng nếu bạn nhận được một file đủ thực sự nhỏ sau đó bạn sẽ thấy những shell script chạy trong một phần nhỏ của một chớp mắt nhanh hơn so với kịch bản awk nhưng ai quan tâm?
Và nếu bạn không tin rằng đó là khó khăn hơn để viết kịch bản shell mạnh mẽ hơn awk kịch bản, nhìn vào lỗi này trong kịch bản shell bạn được đăng:
$ cat file
a,b,-e,d
$ cut -d, -f3 file
-e
$ awk -F, '{print $3}' file
-e
$ while IFS=, read -r a a a b; do echo "$a"; done <file
$
Tại sao bạn muốn sử dụng 'awk'? IMHO đây là một vấn đề rất đơn giản. Bạn có bất kỳ ý định nào để giải quyết nó không? – TrueY