이 파일이 있어요
- . ID = tom_fa_10005086
- 0 Parent = tom_fa_10005086
- 0 Parent = tom_fa_10005086
- 2 Parent = tom_fa_10005086
- 1 Parent = tom_fa_10005086
- 0 Parent = tom_fa_10005086
- 0 Parent = tom_fa_10005086
+ . ID = tom_fa_10013928
+ 0 Parent = tom_fa_10013928
+ 0 Parent = tom_fa_10013928
+ 0 Parent = tom_fa_10013928
+ 0 Parent = tom_fa_10013928
+ 2 Parent = tom_fa_10013928
+ 2 Parent = tom_fa_10013928
+ 1 Parent = tom_fa_10013928
+ 1 Parent = tom_fa_10013928
+ 2 Parent = tom_fa_10013928
+ 2 Parent = tom_fa_10013928
- . ID = tom_fa_10000024
- 0 Parent = tom_fa_10000024
- . ID = tom_fa_10004587
- 0 Parent = tom_fa_10004587
- 1 Parent = tom_fa_10004587
그리고 이러한 패턴은
COL 1
tom_fa_10005086
tom_fa_10013928
tom_fa_10000024
tom_fa_10011338
tom_fa_10003474
패턴이 라인과 일치하면 라인을 추출하여 파일로 저장하고 싶습니다.
그런데 150개의 패턴이 있는데 각 일치 항목을 다른 파일에 저장해야 합니까? 따라서 150개의 패턴이 있으면 150개의 출력 파일이 있게 됩니다.
결과는 다음과 같습니다.
파일 1
- . ID = tom_fa_10005086
- 0 Parent = tom_fa_10005086
- 0 Parent = tom_fa_10005086
- 2 Parent = tom_fa_10005086
- 1 Parent = tom_fa_10005086
- 0 Parent = tom_fa_10005086
- 0 Parent = tom_fa_10005086
파일 2
+ . ID = tom_fa_10013928
+ 0 Parent = tom_fa_10013928
+ 0 Parent = tom_fa_10013928
+ 0 Parent = tom_fa_10013928
+ 0 Parent = tom_fa_10013928
+ 2 Parent = tom_fa_10013928
+ 2 Parent = tom_fa_10013928
+ 1 Parent = tom_fa_10013928
+ 1 Parent = tom_fa_10013928
+ 2 Parent = tom_fa_10013928
+ 2 Parent = tom_fa_10013928
파일 3…
나는 생각 중입니다:
grep -f 파일1 파일1 ....
grep -E
답변1
주어진 patterns
파일:
$ cat patterns
tom_fa_10005086
tom_fa_10013928
tom_fa_10000024
tom_fa_10011338
tom_fa_10003474
그 다음에
awk 'NR==FNR{a[$1]=NR; next} $NF in a {print > "outfile" a[$NF]}' patterns file
결과는 다음 파일입니다.
$ head outfile?
==> outfile1 <==
- . ID = tom_fa_10005086
- 0 Parent = tom_fa_10005086
- 0 Parent = tom_fa_10005086
- 2 Parent = tom_fa_10005086
- 1 Parent = tom_fa_10005086
- 0 Parent = tom_fa_10005086
- 0 Parent = tom_fa_10005086
==> outfile2 <==
+ . ID = tom_fa_10013928
+ 0 Parent = tom_fa_10013928
+ 0 Parent = tom_fa_10013928
+ 0 Parent = tom_fa_10013928
+ 0 Parent = tom_fa_10013928
+ 2 Parent = tom_fa_10013928
+ 2 Parent = tom_fa_10013928
+ 1 Parent = tom_fa_10013928
+ 1 Parent = tom_fa_10013928
+ 2 Parent = tom_fa_10013928
==> outfile3 <==
- . ID = tom_fa_10000024
- 0 Parent = tom_fa_10000024
답변2
target.txt
첫 번째 큰 파일의 이름은 이고 두 번째 작은 파일의 이름은 이라고 가정해 보겠습니다 source.txt
.
tail +3 source.txt | while IFS= read -r line; do grep "$line" target.txt > "$line"; done
설명하다
tail +3 source.txt
: 처음 두 줄 삭제source.txt
| while IFS= read -r line; do <FOO>; done
: 이 잘린 파일을while read
구문에 파이프합니다. 이는 truncated 의 각 행을 반복하여source.txt
각<FOO>
행에 대해 작업을 수행합니다.grep "$line" target.txt > "$line"
: 각source.txt
줄에 대해 에서 찾은target.txt
다음 검색한 원래 문자열과 동일한 이름을 가진 파일에 씁니다.
작은 설명: source.txt
실제로 패턴 대신 고정 문자열이 포함된 경우 사용할 수 있는 -F
옵션 입니다 grep
.