내 현재 텍스트 파일은 다음과 같습니다.
VOG0005 - k141_44786_1 - 4.9e-11 41.0 0.0 2e-08 32.4 0.0 2.0 2 0 0 2 2 2 2 -
VOG0005 - k141_46357_20 - 9.2e-44 148.8 1.7 2.4e-32 111.2 0.2 3.0 2 1 1 3 3 3 3 -
VOG0010 - k141_1081_2 - 1.2e-06 27.4 0.5 0.00011 21.0 0.0 2.3 2 0 0 2 2 2 2 -
VOG0010 - k141_17432_67 - 1.2e-07 30.7 0.0 1.7e-07 30.2 0.0 1.3 1 1 0 1 1 1 1 -
VOG0010 - k141_2610_7 - 2.1e-06 26.6 0.0 2.9e-06 26.2 0.0 1.1 1 0 0 1 1 1 1
명령 은 sort
하이픈과 중간 공백을 별도의 열로 계산합니까? 그렇다면 cut
해당 명령을 사용하는 사이에 하이픈을 어떻게 제거할 수 있습니까?
VOG0005 - k141_44786_1 - 4.9e-11
이런 것을 얻으세요
VOG0005 k141_44786_1 4.9e-11
즉, 하나의 공간만 나에게 적합합니다. 다음 명령을 시도했지만 cut -f2 File.txt
내 경우에는 작동하지 않는 것 같습니다.
누구든지 도와줄 수 있나요?
답변1
sed 명령을 사용하여 spac에서 하이픈을 제거할 수 있습니다.
sed 's/- //g'
아래 예시를 참고해주세요
# cat example.txt
VOG0005 - k141_44786_1 - 4.9e-11 41.0 0.0 2e-08 32.4 0.0 2.0 2 0 0 2 2 2 2 -
VOG0005 - k141_46357_20 - 9.2e-44 148.8 1.7 2.4e-32 111.2 0.2 3.0 2 1 1 3 3 3 3 -
VOG0010 - k141_1081_2 - 1.2e-06 27.4 0.5 0.00011 21.0 0.0 2.3 2 0 0 2 2 2 2 -
VOG0010 - k141_17432_67 - 1.2e-07 30.7 0.0 1.7e-07 30.2 0.0 1.3 1 1 0 1 1 1 1 -
VOG0010 - k141_2610_7 - 2.1e-06 26.6 0.0 2.9e-06 26.2 0.0 1.1 1 0 0 1 1 1 1 -
# sed 's/- //g' example.txt
VOG0005 k141_44786_1 4.9e-11 41.0 0.0 2e-08 32.4 0.0 2.0 2 0 0 2 2 2 2 -
VOG0005 k141_46357_20 9.2e-44 148.8 1.7 2.4e-32 111.2 0.2 3.0 2 1 1 3 3 3 3 -
VOG0010 k141_1081_2 1.2e-06 27.4 0.5 0.00011 21.0 0.0 2.3 2 0 0 2 2 2 2 -
VOG0010 k141_17432_67 1.2e-07 30.7 0.0 1.7e-07 30.2 0.0 1.3 1 1 0 1 1 1 1 -
VOG0010 k141_2610_7 2.1e-06 26.6 0.0 2.9e-06 26.2 0.0 1.1 1 0 0 1 1 1 1 -
답변2
와 유사하게 다음을 sed
사용할 수도 있습니다 perl
.
$ cat File.txt | tr -s " " | perl -pe 's/[[:space:]]-//g' | sponge File.txt
VOG0005 k141_44786_1 4.9e-11 41.0 0.0 2e-08 32.4 0.0 2.0 2 0 0 2 2 2 2
VOG0005 k141_46357_20 9.2e-44 148.8 1.7 2.4e-32 111.2 0.2 3.0 2 1 1 3 3 3 3
VOG0010 k141_1081_2 1.2e-06 27.4 0.5 0.00011 21.0 0.0 2.3 2 0 0 2 2 2 2
VOG0010 k141_17432_67 1.2e-07 30.7 0.0 1.7e-07 30.2 0.0 1.3 1 1 0 1 1 1 1
VOG0010 k141_2610_7 2.1e-06 26.6 0.0 2.9e-06 26.2 0.0 1.1 1 0 0 1 1 1 1
또는
<File.txt tr -s " " | perl -pe 's/[[:space:]]-//g' | sponge File.txt
# on fish shell
tr -s " " <File.txt | perl -pe 's/[[:space:]]-//g' | sponge File.txt
설명하다
tr -s " "
# Removes extra spaces
perl -pe 's/[[:space:]]-//g'
# Replaces any ' -' with nothing
sponge File.txt
# Reads standard input and writes it out to the specified file.
분명히 그냥 사용할 수 있습니다 perl
(@ 감사합니다스티븐 차제라스):
perl -pi -e 's/ +/ /g; s/[[:space:]]-//g' File.txt
마찬가지로 sed
:
sed -i -E 's/ +/ /g; s/[[:space:]]-//g' File.txt
설명은 @Stéphane Chazelas 댓글을 참조하세요.
답변3
첫째, 그렇습니다. sort
첫 번째는 열 2로 처리되고 -
, 첫 번째는 k141_xxxx
열 3으로, 두 번째는 -
열 4로 처리됩니다. 그러나 이것은 불완전한 단순화입니다. 진실은 미묘하고 복잡합니다.
귀하의 질문이 완전히 명확하지 않습니다. 두 번째와 네 번째 열을 파괴하려면 다음을 수행하십시오.
awk '{ $2=""; $4=""; print }' example.txt
하이픈으로 필드를 분리하려면 다음을 수행하십시오.
awk '{for (i=1; i<=NF; i++) if ($i == "-") $i = ""; print}' example.txt
awk
그것은 과잉입니다(그러나 그렇습니다 perl
).