С современным (версия > 4. 0) GNU awk, вы могли бы
awk '
FNR>4 {a[$0]=$2; next};
NR==FNR;
END {
PROCINFO["sorted_in"] = "@val_num_asc";
for (i in a) print i;
}
' file1 file2
Пояснение:
FNR>4 {a[$0]=$2; next};
создать массив полей сортировки не-заголовочных строкNR==FNR;
оценивает TRUE только для первого файла, и достигается только для FNR>4
, вызывая печать заголовочных строк для первого файлаPROCINFO["sorted_in"] = "@val_num_asc"
отсортировать массив по значению (т.е. по хранимому полю $2)for (i in a. т.е. сохраненное поле $2)
for (i in a) print i
print indices сортированного массива (которые являются сохраненными строками без заголовков)Тестирование
$ awk 'FNR>4 {a[$0]=$2; next}; NR==FNR; END {PROCINFO["sorted_in"] = "@val_num_asc"; for (i in a) print i;}' file1 file2
header 1
header 2
header 3
lemur 3 dd
cat 4 aa
alligator 4 ca
dog 5 ab
ostrich 10 cd
fish 13 cc
lemming 16 ad
Вместо расширения подсказки \u
-вы можете попросить PS1 расширить $USER
, удалив амперсанд и завершающий текст; изменить локальное или глобальное определение PS1
из:
PS1='[\u@\h \W]\$ '
-:
PS1='[${USER%@*}@\h \W]\$ '
Это допускает больше махинаций, чем (фиксированное)\u
расширение, если USER не только для чтения, но может быть приемлемым.
[bob@host ~]$ USER=notreallyroot
[notreallyroot@host ~]$ USER=notreallyroot@domain.here
[notreallyroot@host ~]$