[英]Use matching value of a RegExp to name the output file
我有此文件“ file.txt”,我想將其拆分為許多較小的文件。 這一部分:
0 id:2293 7:0.78235 12:0.69205 17:0.79421 21:0.77818 ..
4 id:2293 7:0.78235 8:0.97904 12:0.69205 17:0.31709 ..
1 id:2294 7:0.78235 8:0.90994 17:0.49058 21:0.59326 ..
文件的每一行都有一個id字段,該字段類似於屬於id 1的行的“ id:1”。對於文件中的每個id,我想創建一個名為id id
.txt的文件,並將所有屬於該文件中的此ID。 我的蠻力bash腳本解決方案如下。
count=1
while [ $count -lt 19945 ] do
cat file.txt | grep "id:$count " >> ./sets/id$count.txt
count='expr $count + 1'
done
現在這是非常低效的,因為我已經讀了大約20.000次文件。 有沒有一種方法可以只通過一個文件就執行相同的操作? -我可能要問的是一種使用與正則表達式匹配的值來命名關聯的輸出文件的方法。
$ cat file
0 id:2293 7:0.78235 12:0.69205 17:0.79421 21:0.77818 ..
4 id:2293 7:0.78235 8:0.97904 12:0.69205 17:0.31709 ..
1 id:2294 7:0.78235 8:0.90994 17:0.49058 21:0.59326 ..
$ awk -F"[: ]" '{print $0 > "id_"$3".txt"}' file
$ more id_2293.txt
0 id:2293 7:0.78235 12:0.69205 17:0.79421 21:0.77818 ..
4 id:2293 7:0.78235 8:0.97904 12:0.69205 17:0.31709 ..
$ more id_2294.txt
1 id:2294 7:0.78235 8:0.90994 17:0.49058 21:0.59326 ..
您可以構建與此類似的解決方案
試試這個AWK腳本:
#!/usr/bin/awk -f
{
if (match($0, /id:([0-9]+)/, a))
print $0 >> "file" a[1] ".txt";
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.