패턴 파일이 포함된 줄을 추출하여 다른 파일 grep, sed, awk, print에 저장합니다.

패턴 파일이 포함된 줄을 추출하여 다른 파일 grep, sed, awk, print에 저장합니다.

이 파일이 있어요

-   .   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.

관련 정보