목록을 정렬하고 줄 바꿈 대신 쉼표로 항목을 구분합니다.

목록을 정렬하고 줄 바꿈 대신 쉼표로 항목을 구분합니다.

단일 쉼표로 구분된 목록에 모든 파일 시스템을 사전순으로 나열하고 싶습니다. 나는 다음 명령을 사용하고 있습니다 :

cat /proc/filesystems | sed 's/nodev//' | sed 's/,$//'

내 출력은 다음과 같습니다

sysfs
rootfs
ramfs
bdev
proc
cgroup
cpuset
tmpfs
devtmpfs
debugfs
securityfs
sockfs
pipefs
anon_inodefs
devpts
ext3
ext2
ext4
hugetlbfs
vfat
ecryptfs
fuseblk
fuse
fusectl
pstore
mqueue
binfmt_misc
vboxsf

각 파일 시스템을 쉼표로 구분하여 한 줄의 출력으로 어떻게 변경할 수 있습니까?

나는 다음을 사용하여 그것의 일부를 알아 냈습니다 xargs.

cat /proc/filesystems | sed 's/nodev//' | xargs | sed -e 's/ /,/g' 

이제 출력을 사전순으로 형식화하고 싶습니다.

답변1

awk를 사용하세요

awk '{printf "%s%s",(NR>1?",":""),$NF;} END{print""}'  /proc/filesystems

sed 사용

sed -r 's/^nodev//; s/^[[:blank:]]*//; H;1h;$!d;x; s/\n/,/g'  /proc/filesystems

어떻게 작동하나요?

  • s/^nodev//

    이것은 nodev모든 줄의 시작 부분에서 제거됩니다.

  • s/^[[:blank:]]*//

    이렇게 하면 각 줄의 선행 공백이 제거됩니다.

  • H

    그러면 현재 행이 예약된 공간에 추가됩니다.

  • 1h

    첫 번째 행에 있는 경우 예약된 공간을 이 행으로 덮어씁니다.

  • $!d

    마지막 줄에 있지 않다면 패턴 공간을 제거하고 다음 줄에서 시작하세요.

  • x; s/\n/,/g

    우리가 여기까지 오면 우리는 마지막 팀 중 하나가 될 거예요. 이 경우 예약된 공간을 패턴 공간으로 이동하고 모든 줄 바꿈을 쉼표로 바꿉니다.

이를 이해하려면 H;1h;$!d;x전체 파일을 읽는다는 의미의 awk 관용어를 인식하는 것이 도움이 됩니다.

보충: 정렬

이름 정렬:

awk '{print $NF;}'  /proc/filesystems | sort | awk '{printf "%s%s",(NR>1?",":""),$NF;} END{print""}'

답변2

paste이 목적으로 사용되는 도구는 다음과 같습니다.

sed 's/.*[[:blank:]]//' /proc/filesystems | paste -sd,

관련 정보