带有动态输出的egrep
egrep with dynamic output
我正在尝试 egrep 包含特定字符的行。
当我执行单个 egrep 时,它工作正常
egrep -w -h -R 'name' /path/file1.txt > /path/file2.txt
但是当我使用for循环执行多个egrep时,输出都是空的。
for i in {Adam Bob Chuck Dan Eli Frank}; do egrep -w -h -R 'i' /path/file1.txt > /path/name"$i".txt; done
我通过单个 egrep 仔细检查了输出文件,每个输出文件中应该有一些信息。我在这里做错了什么,但我无法弄清楚它是什么..
感谢您的帮助!
这是非常低效的,因为您正在调用 grep 并对每个名称解析整个输入文件一次(参见 https://unix.stackexchange.com/questions/169716/why-is-using-a-shell-loop-to-process-text-considered-bad-practice)。
只需读取一次输入文件:
awk -v names='Adam Bob Chuck Dan Eli Frank' '
BEGIN { split(names,list) }
{
for (i in list) {
if ( [=10=] ~ ("\<" list[i] "\>") ) {
print > ("/path/name" i ".txt")
}
}
}
' /path/file1.txt
以上使用 GNU awk 作为单词边界(\<
和 \>
),对于其他 awk,您只需将正则表达式比较更改为:[=13=] ~ ("(^|[^[:alnum:]_])" list[i] "([^[:alnum:]_]|$)")
.
我正在尝试 egrep 包含特定字符的行。 当我执行单个 egrep 时,它工作正常
egrep -w -h -R 'name' /path/file1.txt > /path/file2.txt
但是当我使用for循环执行多个egrep时,输出都是空的。
for i in {Adam Bob Chuck Dan Eli Frank}; do egrep -w -h -R 'i' /path/file1.txt > /path/name"$i".txt; done
我通过单个 egrep 仔细检查了输出文件,每个输出文件中应该有一些信息。我在这里做错了什么,但我无法弄清楚它是什么..
感谢您的帮助!
这是非常低效的,因为您正在调用 grep 并对每个名称解析整个输入文件一次(参见 https://unix.stackexchange.com/questions/169716/why-is-using-a-shell-loop-to-process-text-considered-bad-practice)。
只需读取一次输入文件:
awk -v names='Adam Bob Chuck Dan Eli Frank' '
BEGIN { split(names,list) }
{
for (i in list) {
if ( [=10=] ~ ("\<" list[i] "\>") ) {
print > ("/path/name" i ".txt")
}
}
}
' /path/file1.txt
以上使用 GNU awk 作为单词边界(\<
和 \>
),对于其他 awk,您只需将正则表达式比较更改为:[=13=] ~ ("(^|[^[:alnum:]_])" list[i] "([^[:alnum:]_]|$)")
.