Linux
文件的每一行都轉換為一個新文件
我有一個包含四列和 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}'