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

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

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

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

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

관련 정보