
여러 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