我的文件 aaa 有 5 行。
01_AAA-11-ID22
02_BBB-33-ID44
03_CCC-55-ID66
.
.
我尝试在文件 bigfile.txt 中的下划线后 grep 任何内容
for i in $(cat aaa)
do
A= $(awk -F '_' '{print $1}' $i)
B= $(awk -F '_' '{print $2}' $i)
grep $B bigfile.txt > $A
done
我尝试做
grep AAA-11-22 bigfile.txt > 01
但是,它似乎不起作用。我的错误代码是
awk:命令。行:1:致命:无法打开文件“01_AAA-11-22”进行读取(没有这样的文件或目录)
需要一些建议。谢谢,
答案1
echo$i
而不是尝试将其作为文件打开:
for i in $(cat aaa)
do
A= $(echo $1 | awk -F '_' '{print $1}')
B= $(echo $i | awk -F '_' '{print $2}')
grep $B bigfile.txt > $A
done
但是,如果您有兴趣,可以用单行awk
代码完全替换这个 for 循环:
awk -F '_' '{system("grep "$2" bigfile.txt > "$1)}' aaa
答案2
你不需要使用awk根本不
while read i
do
grep ${i#*_} bigfile.txt > ${i%%_*}
done <aaa
为了GNU sed
sed 's/\([^_]\+\)_\(.*\)/sed "\/\2\/!d" bigfile.txt >"\1"/e' aaa
为了awk(如果你愿意的话)
awk -F_ '
NR == FNR{
A[$2] = $1
next
}
{
for(a in A)
if($0 ~ a)
print > A[a]
}
' aaa bigfile.txt
对于大文件,您将不得不使用
print >> A[a]
close(A[a])
答案3
您必须使用echo
将 传递$i
给 awk。否则它会查找文件。
A=$(echo $i | awk -F_ '{print $1}')
与B相同