Использование sed для печати содержимого файлов в столбцах - PullRequest
0 голосов
/ 30 марта 2020

У меня есть файл, мое имя файла lookup.txt. Иногда содержимое этого файла составляет 100 строк, поэтому во время печати все прокручивается. Вот почему мне нравится печатать его на экране в 2 или более столбцах.

my bash не поддерживает такие команды, как pr или columns. Нужно быть в старомодной оболочке.

Содержимое поиска файл:

1-Top Scores
2-Last Scores
3-Username
4-Birthday
5-Last Meal today
6-Coronavirus in Italy
7-Lets Stay Home
8-Winner
9-Germany and Belgium
10-Alfa
11-Bravo
12-Charlie and delta

Для печати в столбцах я использую эту команду, найденную здесь в stackoverflow:

cat lookup.txt | xargs printf '%-24s\n' | sed '$p;N;s/\n//;$p;N;s/\n//'

, и это печать в столбцах:

1-Top                   Scores                  2-Last
Scores                  3-Username              4-Birthday
5-Last                  Meal                    today
6-Coronavirus           in                      Italy
7-Lets                  Stay                    Home
8-Winner                9-Germany               and
Belgium                 10-Alfa                 11-Bravo
12-Charlie              and                     delta

Мне нужно, чтобы sed не разделял слова на разные столбцы, а только на строку.

1-Top Scores             6-Coronavirus in Italy     11-Bravo
2-Last Scores            7-Lets Stay Home           12-Charlie and delta
3-Username               8-Winner
4-Birthday               9-Germany and Belgium  
5-Last Meal today        10-Alfa

если 3 столбца имеют ширину, то x символов затем печатаются в 2 столбцах (последний необязательно)
спасибо заранее

  Available tools:
/bin:
ash                  gunzip               ping
base64               gzip                 ping6
bash                 hostname             ps
bash.bash            ionice               ps.procps
busybox              kill                 pwd
busybox.nosuid       kill.procps          rm
busybox.suid         kmod                 rmdir
cat                  ln                   run-parts
chattr               login                sed
chgrp                login.shadow         setserial
chmod                ls                   sh
chown                lsattr               sleep
cp                   lsmod                stat
cttyhack             lsmod.kmod           stty
date                 mkdir                su
dd                   mknod                su.shadow
df                   mktemp               sync
dmesg                more                 tar
dnsdomainname        mount                touch
echo                 mount.util-linux     true
editor               mountpoint           true.coreutils
egrep                mountpoint.sysvinit  umount
fake-hwclock         mpstat               uname
false                mv                   usleep
false.coreutils      netstat              vi
fatattr              nice                 vi.sh
fgrep                pidof                watch
getopt               pidof.procps         watch.procps
grep                 pidof.sysvinit       zcat

/sbin:
arp                 ifup                mkfs.ext4           runlevel.sysvinit
blkid               init                mkswap              setconsole
blkid.util-linux    init.sysvinit       modinfo             shutdown
bootlogd            inotifyd            modinfo.kmod        shutdown.sysvinit
bridge              insmod              modprobe            start-stop-daemon
depmod              insmod.kmod         modprobe.kmod       stb-hwclock
depmod.kmod         ip                  mount.cifs          sulogin
devmem              ip.iproute2         mount.fuse          sulogin.util-linux
e2fsck              iwconfig            mount.ntfs          swapoff
e2label             iwgetid             mount.ntfs-3g       swapon
flock               iwlist              nologin             switch_root
flock.util-linux    iwpriv              nologin.shadow      sysctl
fsck.ext2           iwspy               poweroff            sysctl.procps
fsck.ext3           killall5            poweroff.sysvinit   syslogd
fsck.ext4           klogd               reboot              telinit
fstab-decode        ldconfig            reboot.sysvinit     tunctl
fstrim              loadkmap            rmmod               tune2fs
getty               logread             rmmod.kmod          udhcpc
halt                losetup             route               uevent
halt.sysvinit       lsmod               routef              vigr
hdparm              mdev                routel              vigr.shadow
ifcfg               mke2fs              rtmon               vipw
ifconfig            mkfs.ext2           rtpr                vipw.shadow
ifdown              mkfs.ext3           runlevel

/usr/bin:
[                                   realpath
[[                                  renice
alsamixer                           reset
ar                                  resize
awk                                 rpcclient
basename                            rtmpdump
bdpoll                              scp
bsdcat                              scsi_logging_level
bunzip2                             scsi_mandat
bzcat                               scsi_readcap
c_rehash                            scsi_ready
chage                               scsi_satl
cheetah                             scsi_start
cheetah-analyze                     scsi_stop
cheetah-compile                     scsi_temperature
chfn                                sdparm
chfn.shadow                         seq
chrt                                setsid
chsh                                sexp-conv
chsh.shadow                         sg
cifsdd                              sg_compare_and_write
clear                               sg_copy_results
cmp                                 sg_dd
crontab                             sg_decode_sense
curl                                sg_emc_trespass
cut                                 sg_format
dbclient                            sg_get_config
dbus-cleanup-sockets                sg_get_lba_status
dbus-daemon                         sg_ident
dbus-launch                         sg_inq
dbus-monitor                        sg_logs
dbus-run-session                    sg_luns
dbus-send                           sg_map
dbus-update-activation-environment  sg_map26
dbus-uuidgen                        sg_modes
dc                                  sg_opcodes
diff                                sg_persist
dirname                             sg_prevent
dlist_test                          sg_raw
dos2unix                            sg_rbuf
dotlockfile                         sg_rdac
du                                  sg_read
easy_install                        sg_read_attr
easy_install-2.7                    sg_read_block_limits
eject                               sg_read_buffer
enigma2                             sg_read_long
enigma2.sh                          sg_readcap
env                                 sg_reassign
expiry                              sg_referrals
expr                                sg_rep_zones
faillog                             sg_requests
find                                sg_reset
flip                                sg_reset_wp
free                                sg_rmsn
free.procps                         sg_rtpg
fuser                               sg_safte
fusermount                          sg_sanitize
get_device                          sg_sat_identify
get_driver                          sg_sat_phy_event
get_module                          sg_sat_read_gplog
gpasswd                             sg_sat_set_features
grab                                sg_scan
groups                              sg_senddiag
groups.shadow                       sg_ses
gst-inspect-1.0                     sg_ses_microcode
gst-launch-1.0                      sg_start
gst-stats-1.0                       sg_stpg
gst-typefind-1.0                    sg_sync
head                                sg_test_rwbuf
hotplug_e2_helper                   sg_timestamp
id                                  sg_turs
killall                             sg_unmap
last                                sg_verify
last.sysvinit                       sg_vpd
lastb                               sg_wr_mode
lastb.sysvinit                      sg_write_buffer
lastlog                             sg_write_long
ldbadd                              sg_write_same
ldbdel                              sg_write_verify
ldbedit                             sg_xcopy
ldbmodify                           sg_zone
ldbrename                           sginfo
ldbsearch                           sgm_dd
less                                sgp_dd
llmnrd                              sha1sum
lockfile-check                      sha256sum
lockfile-create                     sha3sum
lockfile-remove                     sha512sum
lockfile-touch                      shellinaboxd
logger                              showiframe
logname                             shuf
lsof                                skill
lspci                               skill.procps
lsusb                               slabtop
mail-lock                           smbcacls
mail-touchlock                      smbclient
mail-unlock                         smbcquotas
md5sum                              smbget
mesg                                smbspool
mesg.sysvinit                       smbtar
mid3cp                              smbtree
mid3iconv                           snice
mid3v2                              snice.procps
mkfifo                              sort
moggsplit                           ssh
mutagen-inspect                     strings
mutagen-pony                        systool
nc                                  tail
ndg_httpclient                      taskset
nettle-hash                         tee
nettle-lfib-stream                  telnet
nettle-pbkdf2                       test
newgidmap                           time
newgrp                              timeout
newgrp.shadow                       tload
newuidmap                           toix
nmap                                toms
nohup                               top
nslookup                            top.procps
ntfs-3g                             tr
ntfs-3g.probe                       traceroute
ntpdate-sync                        traceroute6
od                                  truncate
odhcp6c                             tty
ofgwrite                            ulockmgr_server
ofgwrite_bin                        uniq
ofgwrite_test                       unix2dos
openssl                             unlink
opkg                                unxz
opkg-check-config                   unzip
passwd                              update-alternatives
passwd.shadow                       uptime
patch                               uptime.procps
pgrep                               users
pgrep.procps                        utmpdump
pilconvert.py                       utmpdump.sysvinit
pildriver.py                        vlock
pilfile.py                          vmstat
pilfont.py                          volname
pilprint.py                         w
pkcs1-conv                          wall
pkill                               wall.sysvinit
pkill.procps                        wc
pmap                                wget
pmap.procps                         which
printf                              who
pwdx                                whoami
pwdx.procps                         whois
python                              wpa_passphrase
python-config                       xargs
python2                             xmlcatalog
python2-config                      xmllint
python2.7                           xzcat
python2.7-config                    yes
readlink

/usr/sbin:
addgroup                grpconv                 pwck
adduser                 grpunconv               pwconv
alsactl                 hddtemp                 pwunconv
automount               i2cdetect               rdate
avahi-daemon            i2cdump                 rdev
chgpasswd               i2cget                  readprofile
chpasswd                i2cset                  rfkill
chpasswd.shadow         ifplugd                 run-postinsts
chroot                  inetd                   setlogcons
crond                   logoutd                 sfdisk
delgroup                mkfs.ubifs              telnetd
deluser                 mtd_debug               ubiattach
dropbear                mtdinfo                 ubiblock
dropbearconvert         mtdpart                 ubicrc32
dropbearkey             nanddump                ubidetach
dropbearmulti           nandtest                ubiformat
ether-wake              nandwrite               ubimkvol
ethtool                 newusers                ubinfo
fbset                   nl-class-add            ubinize
flash_erase             nl-class-delete         ubirename
flash_eraseall          nl-class-list           ubirmvol
flash_lock              nl-classid-lookup       ubirsvol
flash_otp_dump          nl-cls-add              ubiupdatevol
flash_otp_info          nl-cls-delete           unix_chkpwd
flash_otp_lock          nl-cls-list             unix_update
flash_otp_write         nl-link-list            update-ca-certificates
flash_unlock            nl-pktloc-lookup        update-rc.d
flashcp                 nl-qdisc-add            useradd
ftpd                    nl-qdisc-delete         userdel
genl-ctrl-list          nl-qdisc-list           usermod
groupadd                ntpd                    vsftpd
groupdel                ntpdate                 wpa_action
groupmems               odhcp6c-update          wpa_cli
groupmod                parted                  wpa_supplicant
grpck                   partprobe
root@xp1000max:~#

Ответы [ 2 ]

2 голосов
/ 30 марта 2020

Не требуя полного кредита, вы можете изменить этот andlr c ответ на В bash как я могу разделить столбец в несколько столбцов фиксированного размера на ваш требование.

Вместо добавления столбцов с пробелами вы можете использовать sprintf() для пользовательской печати строк столбцов. Протестировано на GNU awk

awk '
  BEGIN {
    # Numbers of rows to print
    n=5;
  }
  {
    # Add to array with key = 0, 1, 2, 3, 4, 0, 1, 2, ..
    l[(NR-1)%n] = sprintf("%s%-24s", l[(NR-1)%n], $0)
  };
  END {
    # print the array
    for (i = 0; i < length(l); i++) {
      print l[i];
    }
  }
' file
1 голос
/ 30 марта 2020

Попробуйте:

cat lookup.txt | tr '\n' '\0' | xargs -0 -n 2 printf '%-24s %-24s\n'

Команда tr преобразует символы новой строки в нуль-символы. Затем мы говорим xargs взять аргументы, разделенные нулями, и передать по две команде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...