![여기서 예상대로 구분 기호 작업이 중단되지 않는 이유는 무엇입니까?](https://linux55.com/image/133475/%EC%97%AC%EA%B8%B0%EC%84%9C%20%EC%98%88%EC%83%81%EB%8C%80%EB%A1%9C%20%EA%B5%AC%EB%B6%84%20%EA%B8%B0%ED%98%B8%20%EC%9E%91%EC%97%85%EC%9D%B4%20%EC%A4%91%EB%8B%A8%EB%90%98%EC%A7%80%20%EC%95%8A%EB%8A%94%20%EC%9D%B4%EC%9C%A0%EB%8A%94%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
이 파일을 입력으로 가지고 있습니다.
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
입력의 필드는 다양한 양의 공백으로 구분되므로 다음을 제안합니다.
- 데이터를 "변경"할 수 있는 경우
sed
Steeldriver: 에 표시된 대로 여러 공백을 하나로 줄 이세요sed 's/ */ /g' < input | cut -d' ' -f2
. awk
그렇지 않으면 필드를 여러 후속 필드 구분 기호로 분할하는 다음과 같은 도구를 사용하는 것이 좋습니다 .awk '{print $2}' < input