No. Хотя иметь гигабайты ОЗУ в наши дни — это фантастика, было время, когда ОЗУ было очень ограниченным ресурсом (я учился программированию на VAX 11/750 с 2 МБ ОЗУ), и единственной вещью в ОЗУ были активные исполняемые файлы и страницы данных активных процессов и файловых данных, которые находились в буферном кеше.
Буферный кеш был очищен, а страницы данных выгружены. И часто временами. Исполняемые страницы, доступные только для чтения, были перезаписаны, а таблицы страниц помечены, поэтому, если программа снова касалась этих страниц, они загружались из файловой системы. Данные были выгружены из свопа. Как было отмечено выше, библиотека STDIO подтягивала данные блоками и получала программой по мере необходимости: fgetc, fgets, fread и т.д.
С помощью mmap файл может быть отображен в адресное пространство процесса, как это делается с объектами разделяемой библиотеки или даже с обычными файлами. Да, у вас может быть некоторая степень контроля над тем, находится он в ОЗУ или нет (mlock), но это не так далеко (см. раздел кода ошибки mlock).
Использование Perl:
perl -alne 'print reverse split /(\|)/'
(извините за путаницу)
или...
perl -alne 'print reverse /[|]|[^|]+/g'
Попробуйте это,
awk -F '|' '{for (i=NF;i>0;i--){if (i!=1) printf $i"|"; else printf $i};printf "\n"}' file.csv
London|First|Hunk|1
London|Second|Hero|2
Pow|First|Will|3
Pow|Second|Thomas|4
Berlin|First|Venus|5
Для печати только последней строки
awk 'END{print}' file.csv | awk -F '|' '{for (i=NF;i>0;i--){if (i!=1) printf $i"|"; else printf $i};printf "\n"}'
cat filename | sed -r 's/(.*)\|(.*)\|(.*)\|(.*)/\4\|\3\|\2\|\1/g' > output.file
Теперь, если вы проверите свой выходной файл, вы увидите желаемый результат.
Выполнено командой ниже
k=`awk '{print NR}' u.txt | sed -n '$p' `
z=`awk -F "|" '{print NF}' u.txt | sort |uniq`
praveen@praveen:~$ for ((i=1;i<=k;i++)); do for ((j=$z;j>=1;j--)); do awk -v i="$i" -v j="$j" -F "|" 'NR==i{print $j}' u.txt ; done| perl -pne "s/\n/ /g"| awk '{print $0"\n"}'|sed -r "s/\s+/|/g"| sed "s/|$//g"; done| sed '/^$/d'
выход
k=`awk '{print NR}' u.txt | sed -n '$p' `
z=`awk -F "|" '{print NF}' u.txt | sort |uniq`
for ((i=1;i<=k;i++)); do for ((j=$z;j>=1;j--)); do awk -v i="$i" -v j="$j" -F "|" 'NR==i{print $j}' u.txt ; done| perl -pne "s/\n/ /g"| awk '{print $0"\n"}'|sed -r "s/\s+/|/g"| sed "s/|$//g"; done| sed '/^$/d'
London|First|Hunk|1
London|Second|Hero|2
Pow|First|Will|3
Pow|Second|Thomas|4
Berlin|First|Venus|5
Извините, нет awk.
$ paste -d\| <(cut -d\| -f4 file) <(cut -d\| -f3 file) <(cut -d\| -f2 file) <(cut -d\| -f1 file)
London|First|Hunk|1
London|Second|Hero|2
Pow|First|Will|3
Pow|Second|Thomas|4
Berlin|First|Venus|5
$ sed -E 's/(.*)\|(.*\|)(.*\|)(.*)/\4|\3\2\1/' file
London|First|Hunk|1
London|Second|Hero|2
Pow|First|Will|3
Pow|Second|Thomas|4
Berlin|First|Venus|5
Или вы можете направить вывод своей таблицы в sed
$ cat filename | sed -r 's/(.*)\|(.*)\|(.*)\|(.*)/\4\|\3\|\2\|\1/g'