Я не думаю, что это возможно с ls, но Вы могли использовать, находят вместо этого:
find . -maxdepth 1 -iname '*abc*'
Я думаю, что Вы могли сделать это с paste
, и возможно join
.
paste file1 file2 > temp1
paste temp1 file3 > temp2
paste tmpe2 file4 > final
Это должно работать, если файлы содержат станцию 1 через n данные в порядке. В противном случае необходимо будет выровнять файлы так или иначе. Если "станция n" нотация является частью каждого файла, необходимо отсортировать их:
sort -o file1 file1
sort -o file2 file2
... and so forth
Затем Вы могли сделать join
вместо paste
как выше. join
имеет некоторые хитрые опции о помещении строк в выводе, которые не имеют соответствия в другом файле, таким образом, Вам, вероятно, придется читать join
страница справочника очень тщательно и эксперимент немного для получения то, что Вы хотите.
Из Вашего описания это кажется, что требуется выполнить итерации через эти 4 файла, Prec, Tmin, Tmax и ветер и взять данные столбца от каждого и объединить его в файл ожога на каждый столбец.
Один способ достигнуть этого при помощи Bash for
цикл, paste
и awk
. Подход прошел бы примерно так:
for i in `seq 8`; do
... do stuff ...
done
Основная цель этого цикла состояла бы в том, чтобы ступить через столбцы, 1 - 8.
Следующий бит, который мы должны соединить, является способностью вытянуть данные из файла по столбцам. Одна идея состояла бы в том, чтобы использовать awk
сделать это.
$ awk '{print $1}' Prec
1
0
0.254
0
Мы можем взять это шаг вперед и заставить его пропускать первую строку, которая является ссылочным номером столбца, как так:
$ awk 'NR>1{print $1}' Prec
0
0.254
0
Мы можем пойти еще больше путем параметризации столбца, который мы печатаем путем создания этого переменной, в которую мы передаем awk
как так:
$ awk -v a=1 'NR>1{print $a}' wind
0
1.778
1.652
$ awk -v a=2 'NR>1{print $a}' wind
0
1.778
1.653
Этот бит является, вероятно, наименее изящным битом к этому решению, но я awk
новичок, поэтому когда в сомнении, идет со взломом.
Здесь использовали вывод от нескольких awk
которые вытягивают постолбцовые данные из каждого файла и вставку их вместе использование paste
.
Вот 2 из файлов, именно так легче видеть.
столбец № 1
$ paste <(awk -v a=1 'NR>1 {print $a}' Prec) <(awk -v a=1 'NR>1 {print $a}' Tmin)
0 -23.349
0.254 -23.682
0 -24.302
столбец № 2
$ paste <(awk -v a=2 'NR>1 {print $a}' Prec) <(awk -v a=2 'NR>1 {print $a}' Tmin)
0 -23.339
0.254 -23.683
0 -24.301
Для получения столбцов из всех 4 файлов, мы просто подробно остановимся на этом подходе.
установите наш индекс ($i
) к 1.
$ i=1
$ paste <(awk -v a=$i 'NR>1 {print $a}' Prec) <(awk -v a=$i 'NR>1 {print $a}' Tmin) <(awk -v a=$i 'NR>1{print $a}' Tmax) <(awk -v a=$i 'NR>1 {print $a}' wind)
0 -23.349 -17.087 0
0.254 -23.682 -20.082 1.778
0 -24.302 -20.48 1.652
установите наш индекс ($i
) к 2.
$ i=2
$ paste <(awk -v a=$i 'NR>1 {print $a}' Prec) <(awk -v a=$i 'NR>1 {print $a}' Tmin) <(awk -v a=$i 'NR>1{print $a}' Tmax) <(awk -v a=$i 'NR>1 {print $a}' wind)
0 -23.339 -17.082 0
0.254 -23.683 -20.095 1.778
0 -24.301 -20.481 1.653
Поэтому теперь давайте соединимся paste <(awk ..) <(awk ..) <(awk ..) <(awk ..)
в for
цикл.
$ for i in `seq 8`; do
echo "## $i ##"
paste <(awk -v a=$i 'NR>1 {print $a}' Prec) <(awk -v a=$i 'NR>1 {print $a}' Tmin) <(awk -v a=$i 'NR>1{print $a}' Tmax) <(awk -v a=$i 'NR>1 {print $a}' wind)
done
## 1 ##
0 -23.349 -17.087 0
0.254 -23.682 -20.082 1.778
0 -24.302 -20.48 1.652
## 2 ##
0 -23.339 -17.082 0
0.254 -23.683 -20.095 1.778
0 -24.301 -20.481 1.653
## 3 ##
0 -23.327 -17.077 0
0.254 -23.685 -20.109 1.778
0 -24.3 -20.483 1.654
...
Я добавил дополнительное echo
выше того так, чтобы в выводе легче видеть, какой столбец печатается.
Путем добавления этого бита после paste ...
команда, мы можем выписать результаты в отдельные файлы, когда Вы указали.
paste ... | tee out$i.txt
Все это как один лайнер:
$ for i in `seq 8`;do echo "## $i ##"; paste <(awk -v a=$i 'NR>1 {print $a}' Prec) <(awk -v a=$i 'NR>1 {print $a}' Tmin) <(awk -v a=$i 'NR>1{print $a}' Tmax) <(awk -v a=$i 'NR>1 {print $a}' wind) | tee out$i.txt;done
Который приводит к этим записанным файлам:
$ ll
total 48
-rw-rw-r-- 1 saml saml 71 Aug 21 23:17 out1.txt
-rw-rw-r-- 1 saml saml 72 Aug 21 23:17 out2.txt
-rw-rw-r-- 1 saml saml 70 Aug 21 23:17 out3.txt
-rw-rw-r-- 1 saml saml 72 Aug 21 23:17 out4.txt
-rw-rw-r-- 1 saml saml 71 Aug 21 23:17 out5.txt
-rw-rw-r-- 1 saml saml 71 Aug 21 23:17 out6.txt
-rw-rw-r-- 1 saml saml 70 Aug 21 23:17 out7.txt
-rw-rw-r-- 1 saml saml 71 Aug 21 23:17 out8.txt