여기서 예상대로 구분 기호 작업이 중단되지 않는 이유는 무엇입니까?

여기서 예상대로 구분 기호 작업이 중단되지 않는 이유는 무엇입니까?

이 파일을 입력으로 가지고 있습니다.

root      1243  0.0  0.0  65508  6036 ?        Ss   Apr30   0:05 /usr/sbin/sshd -D
root      7385  0.0  0.1 152932 10644 ?        Ss   16:22   0:00 sshd: per1 [priv]
per2  7425  0.0  0.0 152932  6216 ?        S    16:22   0:00 sshd: per2@pts/7
root      8256  0.0  0.1 152876 10240 ?        Ss   16:32   0:00 sshd: per3 [priv]
per3  8298  0.0  0.0 152876  5308 ?        S    16:32   0:00 sshd: per3@pts/9

첫 번째 열의 고유 이름을 선택할 수 있기를 원합니다.

cut -f 1 file.txt | sort | uniq그러나 이것은 작동하지 않습니다. 나 그거하고 싶어cut -f 1 -d " " file.txt ...

왜 이것을 추가해야 합니까 -d 1? 내가 이해한 바로는 열 사이의 공간이아니요탭이 무엇인지 작성해야 합니다. 이 경우에는 이므로 " "이를 작성했습니다. 맞습니까?

그렇다면 여기서 두 번째 열을 선택하는 방법은 무엇입니까?방금 바꿨 cut -f 1는데 cut -f 2그게 안되더군요. 내 출력은 많은 빈 줄입니까? 왜? 왜 작동 cut -f 1하지만 2는 작동하지 않습니까?

답변1

네가 먼저 원한다면공간-separate fields를 cut사용하려면 기본 탭 대신 공백을 사용하도록 지시해야 합니다.

https://linux.die.net/man/1/cut

-d, --delimiter=삭제

필드 구분자로 TAB 대신 DELIM을 사용하세요.

cut공백을 구분 기호로 사용하도록 지정하면 "필드 2"가 첫 번째 공백 다음의 첫 번째 바이트가 됩니다(다른 구분 기호가 나타날 때까지). 이는 A 공백입니다.

다음 데이터를 예시로 사용하세요.

root 1space 2space 3space

...앞에 공백 1개 1space, 앞에 공백 2개 2space, 공백 3개 앞에 옵니다 3space.

$ seq 1 7 | while read index; do echo "$index" - "$(cut -d' ' -f $index < input)"; done
1 - root
2 - 1space
3 -
4 - 2space
5 -
6 -
7 - 3space

입력의 필드는 다양한 양의 공백으로 구분되므로 다음을 제안합니다.

  • 데이터를 "변경"할 수 있는 경우 sedSteeldriver: 에 표시된 대로 여러 공백을 하나로 줄 이세요 sed 's/ */ /g' < input | cut -d' ' -f2.
  • awk그렇지 않으면 필드를 여러 후속 필드 구분 기호로 분할하는 다음과 같은 도구를 사용하는 것이 좋습니다 .awk '{print $2}' < input

관련 정보