내 파일 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
$i
파일로 열려고 하는 대신 echo를 사용 하세요.
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
사용할 필요는 없습니다앗별말씀을요
while read i
do
grep ${i#*_} bigfile.txt > ${i%%_*}
done <aaa
~을 위한GNU sed
sed 's/\([^_]\+\)_\(.*\)/sed "\/\2\/!d" bigfile.txt >"\1"/e' aaa
~을 위한앗(당신이 의향이 있다면)
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
awk하려면 echo
pass를 사용해야 합니다 . $i
그렇지 않으면 파일을 찾습니다.
A=$(echo $i | awk -F_ '{print $1}')
B와 동일