gpt4 book ai didi

bash/bin/grep : Argument list too long (using --file option)

转载 作者:行者123 更新时间:2023-11-29 09:20:11 26 4
gpt4 key购买 nike

我有一个包含 33.869 行的文本文件,我必须过滤其中的 30.067 行。

举个例子:

文件:input.txt(类似 csv 的 33.869 行)

#00001:A123456.10.101.102,first,row,value2,1
#00002:A123456.10.101.103,second,row,value7,85
(omissis)
#33869:A123456.25.170.180,last,test,value9,0

文件:filter.txt(由“\n”分隔的值列表,共 30.067 行)

A123456.10.101.102
A123456.10.101.103
(omissis)
A123456.24.150.115

(预期)输出文件:output.txt(类似于从 input.txt 中提取的 30.067 行的 csv):

#00001:A123456.10.101.102,first,row,value2,1
#00002:A123456.10.101.103,second,row,value7,85
(omissis)
#30067:A123456.24.150.115,whatever,x,y,99

我使用的命令是:

#!/bin/bash
/bin/grep --file="filter.txt" input.txt > output.txt

但是返回的错误是

/bin/grep: Argument list too long

我是否被迫将“filter.txt”分成更小的 block ?

允许的限制是多少?

我没有发现man code命令的限制。

最佳答案

如果输入文件中没有正则表达式,您应该切换到 grep -F,它可以读取大量的输入记录。

如果做不到这一点,拆分输入文件将比在同一文件上运行 30,000 多次 grep 迭代更有效。

这是分成 10,000 行的 block ;适应不同的因素应该是微不足道的。

#!/bin/sh

t=$(mktemp -d -t fgrepsplit.XXXXXXXXXXXX) || exit
trap 'rm -rf "$t"' EXIT # Remove temp dir when done
trap 'exit 127' HUP INT TERM # Remove temp dir if interrupted, too

split -l 10000 "$1" "$t"/pat

for p in "$t"/pat*; do
grep -F -f "$p" "$2"
done

关于bash/bin/grep : Argument list too long (using --file option),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34989292/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com