Сzsh
:
count=0 range="<$start-$stop>"
/home/me/*/file_$~range.txt(Ne['((!++count))'])
Дает подсчет без сохранения списка файлов в памяти.
<1-100>
- это оператор zsh glob, который соответствует десятичным числам в этом диапазоне (обратите внимание, что он соответствует 2, но также и 000002, например)$~var
аналогичен $var
, за исключением того, что содержимое $var
рассматривается как шаблон, а не буквальное значение. (Ne['code'])
является квалификатором глобуса N
:включает nullglob
для этого шаблона, чтобы он не терпел неудачу, если глобус не соответствует ни одному файлу (, что всегда имеет место здесь ). e['code']
выбирает файлы на основе оценки code
. Здесь код(((!++count))
)увеличивает $count
и всегда возвращает false, поэтому файлы не выбираются (, а $count
увеличиваются, и это все, что нас здесь интересует ). $ cat tst.awk
BEGIN {
ARGV[ARGC] = ARGV[ARGC-1] # So we can read the input twice, first to get the max field widths.
ARGC++
# Not using character class [:blank:] because nawk does not support character classes
FS = "[ \t]*:[ \t]*"
split("TELEPHONE:SALARY:LICENSE NO.:NAME:AGE",inNr2Name)
for (inNr in inNr2Name) {
name = inNr2Name[inNr]
wid = length(name)
name2wid[name] = wid
f[name] = inNr # field name to input field number
}
print "\t\t----Employee Information---- "
}
NR==FNR {
for (inNr=1; inNr<=NF; inNr++) {
name = inNr2Name[inNr]
val = $inNr
wid = length(val)
name2wid[name] = (name2wid[name] > wid ? name2wid[name] : wid)
}
next
}
FNR == 1 {
outFmt = "%-" name2wid["NAME"] "s " \
"%-" name2wid["TELEPHONE"] "s " \
"%-" name2wid["AGE"] "s " \
"| " \
"%-" name2wid["SALARY"] "s " \
"| " \
"%-" name2wid["LICENSE NO."] "s\n"
printf outFmt, "NAME", "TELEPHONE", "AGE", "SALARY", "LICENSE NO."
}
{
printf outFmt, $(f["NAME"]), $(f["TELEPHONE"]), $(f["AGE"]), $(f["SALARY"]), $(f["LICENSE NO."])
}
$ awk -f tst.awk file
----Employee Information----
NAME TELEPHONE AGE | SALARY | LICENSE NO.
Miss Cherise Hilton-Moore {246} 548-1278 30 | 2500 | 175A106
Mr Reynold Watson {408} 538-2358 37 | 1550 | 201B154
Miss Natalie Judy-Sealy {210} 655-6279 32 | 2600 | 509UYT6
Mr John McCollin {210} 548-1348 26 | 2500 | 175XCVD3
Mr Ronald Francis {208} 548-1278 31 | 1880 | 150P9URE
Я использовал много промежуточных переменных, все с осмысленными именами, поэтому я ожидаю, что вы сможете понять, что они делают, после небольшого размышления и просмотра справочных страниц, но если нет, то не стесняйтесь задавать вопросы.