다음과 같은 형식의 파일이 많이 있습니다.
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
이는 열 내부의 필드가 비어 있지 않고 공백을 포함하지 않는 한 작동합니다.