- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - phát hiện rò rỉ bộ nhớ Ruby/Ruby on Rails
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
使用 bash 脚本(Ubuntu 16.04),我正在尝试比较 2 个范围列表:file1 中任何范围内的任何数字是否与 file2 中任何范围内的任何数字一致?如果是这样,打印第二个文件中的行。在这里,我将每个范围作为 2 个制表符分隔的列(在文件 1 中,第 1 行表示范围 1-4,即 1、2、3、4)。真正的文件是相当大的。
文件1:
1 4
5 7
8 11
12 15
文件2:
3 4
8 13
20 24
期望的输出:
3 4
8 13
我最好的尝试是:
awk 'NR=FNR { x[$1] = $1+0; y[$2] = $2+0; next};
{for (i in x) {if (x[i] > $1+0); then
{for (i in y) {if (y[i] <$2+0); then
{print $1, $2}}}}}' file1 file2 > output.txt
这将返回一个空文件。
我认为脚本需要使用 if-then 条件进行范围比较,并遍历两个文件中的每一行。我找到了每个概念的示例,但无法弄清楚如何将它们组合起来。
Cảm ơn sự giúp đỡ nào!
câu trả lời hay nhất
当然,这取决于您的文件有多大。如果它们不够大,无法耗尽内存,您可以尝试这个 100% bash 解决方案:
declare -a min=() # array of lower bounds of ranges
declare -a max=() # array of upper bounds of ranges
# read ranges in second file, store then in arrays min and max
while read a b; do
min+=( "$a" );
max+=( "$b" );
done < file2
# read ranges in first file
while read a b; do
# loop over indexes of min (and max) array
for i in "${!min[@]}"; do
if (( max[i] >= a && min[i] <= b )); then # if ranges overlap
echo "${min[i]} ${max[i]}" # print range
unset min[i] max[i] # performance optimization
là
xong
done < file1
这只是一个起点。有许多可能的性能/内存占用改进。但它们在很大程度上取决于文件的大小和范围的分布。
编辑 1:改进了范围重叠测试。
编辑 2:重用了 RomanPerekhrest 提出的优秀优化(未设置 file2
中已打印的范围)。当范围重叠的可能性很高时,性能应该更好。
EDIT 3:与 RomanPerekhrest 提出的 ôi
版本的性能比较(修复最初的小错误后):ôi
介于 10 和在这个问题上比 đập mạnh
快 20 倍。如果性能很重要,而您在 ôi
Và đập mạnh
之间犹豫不决,则首选:
awk 'NR == FNR { a[FNR] = $1; b[FNR] = $2; next; }
{ for (i in a)
if ($1 <= b[i] && a[i] <= $2) {
print a[i], b[i]; delete a[i]; delete b[i];
}
}' file2 file1
关于linux - 如何比较bash中的2个范围列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46033946/
Như tiêu đề đã nói, ans_list là một danh sách các câu trả lời và ans_index là một con số (chỉ mục của câu trả lời trong từ vựng, nhưng không liên quan gì đến nó cả) Tree.anslist được tạo ở đây là gì? (ví dụ: chỉ dành cho lần đầu tiên), bỏ qua việc lặp lại. f
Tôi hiện đang lưu trữ dữ liệu đầu vào của người dùng trong một danh sách được phân tách bằng dấu phẩy như sau: Userid | Tùy chọn 1 |
Tôi hiện đang lưu trữ dữ liệu đầu vào của người dùng trong một danh sách được phân tách bằng dấu phẩy như sau: Userid | Tùy chọn 1 |
Tôi muốn biết cách làm phẳng hoàn toàn danh sách và nội dung chứa chúng. Trong số những thứ khác, tôi đã nghĩ ra một giải pháp giúp có thể trượt thứ gì đó có nhiều phần tử và đặt chúng lại với nhau hoặc lấy đi thứ gì đó có một phần tử sau khi nó bị trượt. Điều này tương tự như Làm thế nào để tôi “làm phẳng
Tôi muốn biết cách làm phẳng hoàn toàn danh sách và nội dung chứa chúng. Trong số những thứ khác, tôi đã nghĩ ra một giải pháp giúp có thể trượt thứ gì đó có nhiều phần tử và đặt chúng lại với nhau hoặc lấy đi thứ gì đó có một phần tử sau khi nó bị trượt. Điều này tương tự như Làm thế nào để tôi “làm phẳng
Câu hỏi này đã có câu trả lời: Chuyển đổi danh sách lồng nhau thành mảng 2d (3 câu trả lời) Đã đóng 7 năm trước. Có lối tắt nào trong java để chuyển đổi Danh sách> thành Chuỗi [] không?
Tôi gặp sự cố khi sắp xếp Danh sách>. Tôi đã tạo một bộ so sánh tùy chỉnh nơi tôi viết mã để sắp xếp dữ liệu. lớp công khai CustomComparator triển khai Trình so sánh
Câu hỏi này đã có câu trả lời: Đã đóng cửa 10 năm trước. Có thể trùng lặp: Java Generics: Không thể chuyển Danh sách sang Danh sách? Tôi chỉ muốn biết tại sao thế hệ java sau
Đang cố gắng tìm ra cách LINQy để làm điều này nhưng tôi không thể nghĩ ra bất cứ điều gì. Tôi có một danh sách các đối tượng<> chứa thuộc tính là danh sách các mã chữ cái được phân tách bằng dấu phẩy: lst[0].codes = "AA,BB,DD" lst[1
Giả sử tôi có những nhiệm vụ sau: point = [] point = (1, 2) Tôi sẽ thực hiện việc này như thế nào: point += point Nó hoạt động tốt và cho tôi điểm = [1, 2]. Tuy nhiên, nếu tôi làm: poin
Cách chuyển đổi loại List[Task[List[Header]]] thành Task[List[Header]] trong scala. Tôi có một phương thức trả về Task[List[Header]] và các cuộc gọi được thực hiện nhiều lần
Làm cách nào để tìm các phần tử của danh sách hai chiều trong Java? Tôi có một hàm lấy Danh sách> và tôi muốn biết cách tìm các hàng và cột của danh sách này. Câu trả lời hay nhất Nếu bạn thích Danh sách > obj thì bạn có thể truy cập obj.get(cur như thế này
Gán Danh sách vào Danh sách hoạt động tốt. Gán Danh sách> vào Danh sách> không biên dịch. Mã public class Main { public static void main(String[] a
Tôi đang viết một phương thức trong Java phải nhận và lặp lại Danh sách các Serializables. Sự khác biệt là gì: public void myMethod(List list) { } và public void myMethod(List list) { }
Tôi thấy nhiều người muốn cập nhật một phần lưới/danh sách/cây bằng mvvm nhưng họ không muốn làm mới toàn bộ danh sách. Đối với bất kỳ ai gặp phải vấn đề này, tôi đã làm ví dụ sau. Hy vọng điều này hữu ích cho bạn. Câu trả lời hay nhất Đây là một ví dụ đơn giản. Điều quan trọng nhất trong toàn bộ mã là: Bi
Tôi đang viết trình bao bọc cho thư viện C++ hiện có sử dụng danh sách, trong đó T là cấu trúc tùy chỉnh. Tôi được khuyên nên sử dụng vectơ thay vì danh sách, nhưng tôi đang cố gắng tránh sửa đổi thư viện. Để hiểu rõ hơn về tình huống này, tôi đã tạo một ứng dụng đơn giản bằng cách sử dụng danh sách
Danh sách danh sách Danh sách danh sách Có sự khác biệt nào giữa hai khai báo này không? Cảm ơn, câu trả lời tốt nhất là có. Danh sách có thể chứa hỗn hợp của tất cả những thứ khác nhau bắt nguồn từ Base. Danh sách chứa các mục đồng nhất (theo nghĩa là tất cả chúng đều phải như vậy).
Ai đó có thể giải thích sự khác biệt giữa các loại sau càng chi tiết càng tốt? Danh sách Danh sách Danh sách Hãy để tôi nói cụ thể hơn một chút. Khi nào tôi muốn sử dụng // 1 public void CanYouGiveMeAnAnswer(List l
Tôi có một danh sách các bộ dữ liệu, mỗi bộ dữ liệu là một cặp danh sách. Vì vậy, dữ liệu của tôi trông giống như: mylist = [(['foo', 'bar'], ['bar', 'bar']),(['bar', 'bar'],['bar', '
Có thể là một tiêu đề thú vị, nhưng tôi đang gặp phải vấn đề sau: Đưa ra một danh sách loại (a * b), tôi muốn tạo một danh sách mới về danh sách loại (a * b). Một ví dụ: đưa ra một danh sách let testL
Tôi là một lập trình viên xuất sắc, rất giỏi!