패턴이 포함된 전체 항목을 어떻게 삭제합니까?

패턴이 포함된 전체 항목을 어떻게 삭제합니까?

다음 형식의 파일이 많이 있습니다.

Num  name1  name2  value

예를 들어 in1.sp라는 파일은 다음과 같습니다.

 C1    in1    out1        3.9e-12
 C2    foo    st1/in1     1.2e-14
 C3    foo2   in1         8.3e-14
 ...

등. 모든 행에서 이름 열 중 하나에 파일 이름이 포함됩니다. 다른 텍스트가 있어도 파일 이름이 포함된 전체 항목을 삭제하고 싶습니다. 따라서 위의 내용이 입력인 경우 원하는 출력은 다음과 같습니다.

 C1    out1    3.9e-12
 C2    foo     1.2e-14
 C3    foo2    8.3e-14
 ...

감사해요!

답변1

나도 당신을 올바르게 이해했다면 이것을 시도해보십시오

for f in *.sp; do 
  sed "s/[^ ]*${f%.*}[^ ]*//" "$f" | column -t
done

산출:

C1  out1    3.9e-12
C2  foo     1.2e-14
C3  foo2    8.3e-14

답변2

내가 올바르게 이해했다면 파일 이름과 일치하는 항목(확장자 제외)이 포함된 모든 필드 값을 제거하고 싶을 것입니다.

grep그렇다면 다음 사이트에서 현장에서 이를 수행할 수 있습니다 perl.

$ cat in1.sp 
 C1    in1    out1        3.9e-12
 C2    foo    st1/in1     1.2e-14
 C3    foo2   in1         8.3e-14

그 다음에

$ perl -alpe '$_ = join "\t", grep { $_ !~ (split(/\./,$ARGV))[0] } @F' in1.sp 
C1  out1  3.9e-12
C2  foo   1.2e-14
C3  foo2  8.3e-14

답변3

awk필요한 열을 선택하는 데 사용할 수 있습니다.

$ awk '{print $1 "\t" $2 "\t" $4}' in1.sp 
C1  in1 3.9e-12
C2  foo 1.2e-14
C3  foo2    8.3e-14

이는 열 내의 필드가 비어 있지 않고 공백이 포함되어 있지 않은 한 작동합니다.

관련 정보