Хорошо, у меня есть проблема, с которой вы, ребята, можете помочь.

У меня 24 папки. Помечено Angle1, Angle2, ..., Angle24

Каждая папка имеет имя файла output.txt

В каждом файле с именем output.txt я хочу получить определенную информацию.

Есть 10 столбцов данных с числами, но числа имеют переменную длину. Мне нужен 9-й столбец чисел, но это не значит, что это просто 9-й столбец по символам. Это может быть 46 столбцов или что-то в этом роде. В любом случае, каждый столбец отделен пробелом, так что, возможно, это будет полезно.

Я хочу пройтись по Angle1, Angle2 и т.д., Получить 9-й столбец данных от каждого и поместить 24 столбца данных в новый файл в родительском каталоге с именем total.txt.

Это может быть невозможно, но просто любопытно - возможно ли это?

Обратите внимание, что я использую Windows PowerShell, но мог бы использовать Ubuntu, если это проще. Если какой-либо ответ может не сработать в обеих средах, укажите, для чего он предназначен.

1 ответ1

2

Вы не указываете формат вывода и / или если вам нужны некоторые функции агрегации, но один пример сценария, который будет создавать как выходной файл с одним столбцом:

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .