NR == 1 {
for (i = 1; i <= NF; i++) {
header[i] = $i
printf "%s\t", $i
}
print ""
}
NR > 1 {
for (i = 1; i <= NF; i++) {
printf "%s=%s\t", header[i], $i
}
print ""
}
1. Создайте файл с именем awkprog и вставьте в него указанное выше содержимое.
2. Предполагая, что имя вашего файла data.txt.
3. Затем запустите awk -f awkprog data.txt
I ' m не уверен, что требуется для одной команды, но это довольно близко:
(cd /directory/; find -type f -printf '%P\0' | while IFS= read -r -d '' fn; do
awk '{ print length, $0 }' "$fn" | sort -nur | sed -r 's/^[0-9]+ //' > "$fn.~"
mv "$fn.~" "$fn"
done)
Первая строка просто считывает имена файлов настолько надежно, насколько это возможно.
Во второй строке происходит вся работа:
. Строка mv затем записывает временный файл поверх оригинала (так как это невозможно сделать во время трубопровод).