열의 텍스트를 고려하여 반복되는 줄을 제거하려면 어떻게 해야 합니까?

열의 텍스트를 고려하여 반복되는 줄을 제거하려면 어떻게 해야 합니까?

다음 파일이 있습니다.

ICR1 +
ICR1+1+3199 +
ICR1+2526+2828 +
IRT1 +
IRT1+1+1489 +
IRT1+713+937 +
LSR1 -
LSR1+1+1175 -
LSR1+366+638 -
NME1 +
NME1+1+340 +
NME1+2+118 +
PWR1 -
PWR1+1+941 -
PWR1+724+939 -
Q0017 -
Q0017+1+162 -
Q0020 -
Q0020+1370+1513 -
Q0020+1+440 -

첫 번째 열과 두 번째 열은 탭으로 구분됩니다. 다음이 필요합니다.

ICR1 +
IRT1 +
LSR1 -
NME1 +
PWR1 -
Q0017 -
Q0020 -

필드 구분 기호 "+"와 함께 awk를 사용하려고 시도했지만 두 번째 열에서도 +가 지워졌습니다.

답변1

awk의 필드 구분 기호를 공백 또는 로 설정한 +다음 고전적인 연관 배열 기반 중복 제거를 수행할 수 있습니다.

$ awk -F'[ \t+]' '!seen[$1]++' file
ICR1 +
IRT1 +
LSR1 -
NME1 +
PWR1 -
Q0017 -
Q0020 -

답변2

어쩌면 내가 문제를 오해했을 수도 있지만 다음과 같이 작동하는 것 같습니다.

grep -v '+.' file

산출:

ICR1 +
IRT1 +
LSR1 -
NME1 +
PWR1 -
Q0017 -
Q0020 -

답변3

sed나는 명령을 사용하여 동일한 결과를 얻었습니다.

sed -n '/^.\{1,5\} .$/p' filename

산출

ICR1 +
IRT1 +
LSR1 -
NME1 +
PWR1 -
Q0017 -
Q0020 -

답변4

사용밀러:

mlr --tsv --implicit-csv-header --headerless-csv-output \
    put -S '$1=gsub($1,"[+].+$","")' then uniq -a inputfile

출력은 다음과 같습니다.

ICR1    +
IRT1    +
LSR1    -
NME1    +
PWR1    -
Q0017   -
Q0020   -

관련 정보