Поместите список всех файлов, кроме первого, в переменную и запустите для него цикл for.
listinmemory=`ls -alht | tail -n +5 | awk '{print $9}'`; for each in $listinmemory; do mv $each /path/to/directory; done
ls -alht
перечислит 4 строки, на которых вы не хотите ничего запускать,
total 123K
drwxr-xr-x. 5 user user 1.0K Jun 27 09:20.
drwx------. 13 user user 2.0K Jun 27 10:36..
-rw-rw-r--. 1 user user 3.0K Jun 6 18:29 file1
самый последний файл и 3 строки --затем все файлы, которые вы делаете, поэтому tail -n +5
пропустит первые 4 строки и запустит mv $each /path/to/directory
для всех найденных файлов!
$ awk -F' *, *' -v OFS='\n' -v ORS='\n\n' '
NR==1{split($0,h); next} {for (i=1;i<=NF;i++) $i=h[i]"="$i}
1' file
Name=Alex
Age=22
Education=Computer Science
Address=TX
Name=Ron
Age=24
Education=Computer Science
Address=AU
В случае, если это всегда один и тот же порядок столбцов и всегда первая строка, содержащая столбцы:
<Foo.csv tail -n '+2' | awk -F',' '{print "Name="$1"\nAge="$2"\n"}'
Запускает канал с содержимым Foo.csv. Пропускает первую строку (конец кажется смещенным на единицу, поэтому +2 )и отображает все остальные с запятой в качестве разделителя (-F',', первая - $1, вторая $2 )в блоках, разделенных новой строкой. Заполните пропущенное поле (s ). Обратите внимание на одинарные кавычки вокруг командного блока awk и двойные кавычки для статического текста внутри него.
Предполагая, что символы пробела перед TX
и AU
являются опечатками:
$ awk -F',' 'FNR==1{split($0, a); next}{for (i=1;i<=NF;i++)print a[i] "=" $i; print ""}' Foo.csv
Name=Alex
Age=22
Education=Computer Science
Address= TX
Name=Ron
Age=24
Education=Computer Science
Address= AU
Это будет печатать новую строку после каждого блока.
$ cat print.sh
#!/bin/sh
echo "Name=$1\nAge=$2\nEducation=$3\nAddress=$4\n"
$ cat Foo.csv | csv-exec --./print.sh %Name %Age %Education %Address
csv -exec взят изhttps://github.com/mslusarz/csv-nix-tools.