여러 CSV를 연결하여 생성된 CSV로 작업하면서 중복된 헤더 행을 제거할 수 있는 가능성을 찾고 있습니다(연결된 각 CSV에 존재하는 중복된 헤더 행은 동일함). 첫 번째 행이 중복된 내 CSV는 다음과 같습니다.
ID(Prot), ID(lig), ID(cluster), dG(rescored), dG(before), POP(before)
1000, lig40, 1, 0.805136, -5.5200, 79
1000, lig868, 1, 0.933209, -5.6100, 42
1000, lig278, 1, 0.933689, -5.7600, 40
1000, lig619, 3, 0.946354, -7.6100, 20
1000, lig211, 1, 0.960048, -5.2800, 39
1000, lig40, 2, 0.971051, -4.9900, 40
1000, lig868, 3, 0.986384, -5.5000, 29
1000, lig12, 3, 0.988506, -6.7100, 16
1000, lig800, 16, 0.995574, -4.5300, 40
1000, lig800, 1, 0.999935, -5.7900, 22
1000, lig619, 1, 1.00876, -7.9000, 3
1000, lig619, 2, 1.02254, -7.6400, 1
1000, lig12, 1, 1.02723, -6.8600, 5
1000, lig12, 2, 1.03273, -6.8100, 4
1000, lig211, 2, 1.03722, -5.2000, 19
1000, lig211, 3, 1.03738, -5.0400, 21
ID(Prot), ID(lig), ID(cluster), dG(rescored), dG(before), POP(before)
10V1, lig40, 1, 0.513472, -6.4600, 150
10V1, lig211, 2, 0.695981, -6.8200, 91
10V1, lig278, 1, 0.764432, -7.0900, 70
10V1, lig868, 1, 0.787698, -7.3100, 62
10V1, lig211, 1, 0.83416, -6.8800, 54
10V1, lig868, 3, 0.888408, -6.4700, 44
10V1, lig278, 2, 0.915932, -6.6600, 35
10V1, lig12, 1, 0.922741, -9.3600, 19
10V1, lig12, 8, 0.934144, -7.4600, 24
10V1, lig40, 2, 0.949955, -5.9000, 34
10V1, lig800, 5, 0.964194, -5.9200, 30
10V1, lig868, 2, 0.966243, -6.9100, 20
10V1, lig12, 2, 0.972575, -8.3000, 10
10V1, lig619, 6, 0.979168, -8.1600, 9
10V1, lig619, 4, 0.986202, -8.7800, 5
10V1, lig800, 2, 0.989599, -6.2400, 20
10V1, lig619, 1, 0.989725, -9.2900, 3
10V1, lig12, 7, 0.991535, -7.5800, 9
ID(Prot), ID(lig), ID(cluster), dG(rescored), dG(before), POP(before)
10V2, lig40, 1, 0.525767, -6.4600, 146
10V2, lig211, 2, 0.744702, -6.8200, 78
10V2, lig278, 1, 0.749015, -7.0900, 74
10V2, lig868, 1, 0.772025, -7.3100, 66
10V2, lig211, 1, 0.799829, -6.8700, 63
10V2, lig12, 1, 0.899345, -9.1600, 25
10V2, lig12, 4, 0.899606, -7.5500, 32
10V2, lig868, 3, 0.903364, -6.4800, 40
10V2, lig278, 3, 0.913145, -6.6300, 36
10V2, lig800, 5, 0.94576, -5.9100, 35
이 CSV를 사후 처리하려면 중복된 헤더 행을 제거해야 합니다.
ID(Prot), ID(lig), ID(cluster), dG(rescored), dG(before), POP(before)
융합된 CSV의 시작 부분(첫 번째 줄!)에만 헤더를 유지하세요. 다음 awk one-liner를 사용하여 첫 번째 줄을 찾은 다음 중복 항목을 제거해 보았습니다.
awk '{first=$1;gsub("ID(Prot)","");print first,$0}' mycsv.csv > csv_without_repeats.csv
하지만 헤더 행을 인식하지 못합니다. 이는 스키마가 올바르게 정의되지 않았음을 의미합니다.
반복 필터링 후 행을 정렬하기 위해 내 AWK 코드가 파이프라인을 통해 추가로 정렬되어야 한다고 가정하면 이를 어떻게 수정할 수 있습니까?
awk '{first=$1;gsub(/ID(Prot)?(\([-azA-Z]+\))?/,"");print first,$0}' | LC_ALL=C sort -k4,4g input.csv > sorted_and_without_repeats.csv
답변1
다음은 첫 번째 줄이 아닌 이상 awk
으로 시작하는 모든 줄을 건너뛰는 스크립트 입니다 .ID(Prot)
awk 'NR==1 || !/^ID\(Prot\)/' file > newFile
여기도 같은 생각 perl
입니다:
perl -ne 'print if $.==1 || !/^ID\(Prot\)/' file > newFile
또는 원본 파일을 제자리에서 편집합니다.
perl -i -ne 'print if $.==1 || !/^ID\(Prot\)/' file
답변2
POSIX 준수 sed
( GNU sed
및 에서 테스트됨 busybox sed
):
sed '1!{/^ID/d;}' data
.으로 시작하면 첫 번째 줄을 제외한 모든 줄을 삭제합니다 ID
. 일부 sed
구현에서는 -i
선택적으로 파일의 내부 편집을 활성화할 수 있습니다.
awk
:
awk 'NR == 1 {h=$0; print} $0 == h {next}1' data
첫 번째 줄에 헤더를 저장하고 인쇄하면 처리하는 모든 줄에 대해 헤더와 같으면 건너뛰고 그렇지 않으면 인쇄합니다.
아니면 똑같습니다 perl
:
perl -lne '$h = $_ if $. == 1; print if($_ ne $h || $. == 1)' data
파일을 내부 편집 -i
할 수 있는 옵션을 추가합니다 .perl
답변3
이는 이 유틸리티를 사용하여 pbm 작업을 수행하는 쉬운 방법입니다 awk
. 그러나 헤더에 공백이 더 많거나 적더라도 출력에는 포함됩니다.
awk '
NR>1&&$0==hdr{next}
NR==1{hdr=$0}1
' file
동일한 접근 방식이지만 스트림 편집기 유틸리티 sed에서:
sed -En '
1h;1!G;/^(.*)\n\1$/!P
' file
답변4
$ awk 'NR==1{h=$0; print} $0!=h' file
ID(Prot), ID(lig), ID(cluster), dG(rescored), dG(before), POP(before)
1000, lig40, 1, 0.805136, -5.5200, 79
1000, lig868, 1, 0.933209, -5.6100, 42
1000, lig278, 1, 0.933689, -5.7600, 40
1000, lig619, 3, 0.946354, -7.6100, 20
1000, lig211, 1, 0.960048, -5.2800, 39
1000, lig40, 2, 0.971051, -4.9900, 40
1000, lig868, 3, 0.986384, -5.5000, 29
1000, lig12, 3, 0.988506, -6.7100, 16
1000, lig800, 16, 0.995574, -4.5300, 40
1000, lig800, 1, 0.999935, -5.7900, 22
1000, lig619, 1, 1.00876, -7.9000, 3
1000, lig619, 2, 1.02254, -7.6400, 1
1000, lig12, 1, 1.02723, -6.8600, 5
1000, lig12, 2, 1.03273, -6.8100, 4
1000, lig211, 2, 1.03722, -5.2000, 19
1000, lig211, 3, 1.03738, -5.0400, 21
10V1, lig40, 1, 0.513472, -6.4600, 150
10V1, lig211, 2, 0.695981, -6.8200, 91
10V1, lig278, 1, 0.764432, -7.0900, 70
10V1, lig868, 1, 0.787698, -7.3100, 62
10V1, lig211, 1, 0.83416, -6.8800, 54
10V1, lig868, 3, 0.888408, -6.4700, 44
10V1, lig278, 2, 0.915932, -6.6600, 35
10V1, lig12, 1, 0.922741, -9.3600, 19
10V1, lig12, 8, 0.934144, -7.4600, 24
10V1, lig40, 2, 0.949955, -5.9000, 34
10V1, lig800, 5, 0.964194, -5.9200, 30
10V1, lig868, 2, 0.966243, -6.9100, 20
10V1, lig12, 2, 0.972575, -8.3000, 10
10V1, lig619, 6, 0.979168, -8.1600, 9
10V1, lig619, 4, 0.986202, -8.7800, 5
10V1, lig800, 2, 0.989599, -6.2400, 20
10V1, lig619, 1, 0.989725, -9.2900, 3
10V1, lig12, 7, 0.991535, -7.5800, 9
10V2, lig40, 1, 0.525767, -6.4600, 146
10V2, lig211, 2, 0.744702, -6.8200, 78
10V2, lig278, 1, 0.749015, -7.0900, 74
10V2, lig868, 1, 0.772025, -7.3100, 66
10V2, lig211, 1, 0.799829, -6.8700, 63
10V2, lig12, 1, 0.899345, -9.1600, 25
10V2, lig12, 4, 0.899606, -7.5500, 32
10V2, lig868, 3, 0.903364, -6.4800, 40
10V2, lig278, 3, 0.913145, -6.6300, 36
10V2, lig800, 5, 0.94576, -5.9100, 35