循環遍歷文件並收集數據

循環遍歷文件並收集數據

好的,我有一個問題,我想你們可以幫忙解決。

我有 24 個資料夾。標記為角度 1、角度 2、...、角度 24

每個資料夾都有一個檔案名稱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 shell 一起運行,並且可以在 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

相關內容