Linux

文件的每一行都轉換為一個新文件

  • May 24, 2022

我有一個包含四列和 5000 行的文件。我想從這個文件中創建 5000 個新文件,以便每個文件都有原始文件中的一行。另外,我想根據第 4 列中的值命名新文件。範例:以下文件 (XXXX.txt) 有四行

文件:XXXX.txt

1 315 4567 G1
1 212 345 G2
2 315 25674 G3
3 12 235673 G4

預期的新文件

文件:G1

1 315 4567 G1

文件:G2

1 212 345 G2

文件:G3

2 315 25674 G3

文件:G4

3 12 235673 G4

我試過這個命令:

awk '{print > $0}' < XXXX.txt

此命令根據需要生成新文件,但我無法根據原始文件的 column4 命名新文件。

您可以嘗試稍微更改awk腳本:

awk '{print > $4}' XXXX.txt

但請注意,如果在源文件中存在與其他第 4 列相同的行,則最終文件將僅包含最後一行。您可以嘗試避免它:

awk '{print >> $4}' XXXX.txt

注意不要多次執行它,因為這會添加兩次記錄。

如果您最終收到“打開的文件過多”錯誤,您可以使用這樣的腳本來顯式關閉輸出文件

awk '{print >> $4;close($4)}' XXXX.txt

你有點接近。 awk '{print > $0}'等價於awk '{print $0 > $0}',更容易理解。

如果您將一行列印到所需的第 4 列呼叫的文件( $ 4) instead of whole line ( $ 0) 那麼它將是正確的。

awk '{print $0 > $4}'

引用自:https://unix.stackexchange.com/questions/703391