Хорошо, у меня есть проблема, с которой, я думаю, вы, ребята, можете помочь.
У меня 24 папки. Подписаны как Angle1, Angle2, ... , Angle24
Каждая папка имеет имя файла output.txt.
В каждом файле с именем output.txt я хочу взять определенную информацию.
Есть 10 столбцов данных с числами, но числа имеют переменную длину. Мне нужен 9-й столбец чисел, но это не значит, что это просто 9-й столбец по символам. Это может быть 46 столбцов или что-то в этом роде. В любом случае, каждый столбец отделен пробелом, так что, возможно, это будет полезно.
Я хочу выполнить цикл по Angle1, Angle2 и т. д., получить 9-й столбец данных из каждого и поместить общую сумму из 24 столбцов данных в новый файл в родительском каталоге с именем total.txt.
Это может быть и невозможно, но просто интересно — возможно ли это?
Обратите внимание, что я использую Windows PowerShell, но могу использовать Ubuntu, если это проще. Если какой-либо ответ не работает в обеих средах, укажите, для какой среды он предназначен.
решение1
Вы не указываете формат вывода и/или хотите ли вы некоторые функции агрегации, но один пример скрипта, который создаст на выходе файл с одним столбцом, выглядит следующим образом:
for ((i=1;i<25;i++))
do
awk '{print $9}' Angle${i}/output.txt >>total.txt
done
Если вы хотите, чтобы 9-й столбец из каждого файла был столбцом, вы можете использовать такой скрипт:
awk '{print $9}' Angle1/output.txt >>tmp
for ((i=2;i<25;i++))
do
awk '{print $9}' Angle${i}/output.txt |paste -d " " tmp - >>total.txt
mv total.txt tmp
done
mv tmp total.txt
Но это будет работать хорошо только в том случае, если у вас одинаковое количество строк во входных файлах.
Эти скрипты будут работать в любой оболочке Bash/Korn и на Linux и Cygwin.
Вот мои тесты. Исходные файлы:
[romeo@localhost tmp]$ cat PKA1/output.txt
1 2 3 4 5 6 7 8 9 0
2 3 4 5 6 7 8 9 0 1
3 4 5 6 7 8 9 0 1 2
[romeo@localhost tmp]$ cat PKA2/output.txt
3 4 5 6 7 8 9 0 1 2
4 5 6 7 8 9 0 1 2 3
5 6 7 8 9 0 1 2 3 4
[romeo@localhost tmp]$ cat PKA3/output.txt
6 7 8 9 0 1 2 3 4 5
7 8 9 0 1 2 3 4 5 6
8 9 0 1 2 3 4 5 6 7
Мои скрипты (отредактированные с учетом моей среды):
[romeo@localhost tmp]$ cat z1
for ((i=1;i<4;i++))
do
awk '{print $9}' PKA${i}/output.txt >>total.txt
done
[romeo@localhost tmp]$ cat z2
awk '{print $9}' PKA1/output.txt >>tmp
for ((i=2;i<4;i++))
do
awk '{print $9}' PKA${i}/output.txt |paste -d " " tmp - >>total.txt
mv total.txt tmp
done
mv tmp total.txt
И мои пробежки:
[romeo@localhost tmp]$ rm total.txt
[romeo@localhost tmp]$ bash z1
[romeo@localhost tmp]$ cat total.txt
9
0
1
1
2
3
4
5
6
[romeo@localhost tmp]$ rm total.txt
[romeo@localhost tmp]$ bash z2
[romeo@localhost tmp]$ cat total.txt
9 1 4
0 2 5
1 3 6