Как добавить столбец, если количество столбцов в файле равно 2

We often hear that which should be avoided. Why? What should we use instead?

Никогда такого не слышал. Пожалуйста, приведите конкретные примеры. Я бы побеспокоился о вашем дистрибутиве Linux и установленных пакетах программного обеспечения, так как это то, откуда взялся which!

SLES 11,4 x 86 -64

в tcsh версии 6.18.01:

> which which

which: shell built-in command.

в версии bash 3.2 -147:

> which which

/usr/bin/which

> which -v

GNU which v2.19, Copyright (C) 1999 - 2008 Carlo Wood.
GNU which comes with ABSOLUTELY NO WARRANTY;
This program is free software; your freedom to use, change
and distribute this program is protected by the GPL.

whichявляется частью util -linux — стандартного пакета, распространяемого организацией ядра Linux для использования в составе операционной системы Linux. Он также предоставляет эти другие файлы

/bin/dmesg
/bin/findmnt
/bin/logger
/bin/lsblk
/bin/more
/bin/mount
/bin/umount
/sbin/adjtimex
/sbin/agetty
/sbin/blkid
/sbin/blockdev
/sbin/cfdisk
/sbin/chcpu
/sbin/ctrlaltdel
/sbin/elvtune
/sbin/fdisk
/sbin/findfs
/sbin/fsck
/sbin/fsck.cramfs
/sbin/fsck.minix
/sbin/fsfreeze
/sbin/fstrim
/sbin/hwclock
/sbin/losetup
/sbin/mkfs
/sbin/mkfs.bfs
/sbin/mkfs.cramfs
/sbin/mkfs.minix
/sbin/mkswap
/sbin/nologin
/sbin/pivot_root
/sbin/raw
/sbin/sfdisk
/sbin/swaplabel
/sbin/swapoff
/sbin/swapon
/sbin/switch_root
/sbin/wipefs
/usr/bin/cal
/usr/bin/chrp-addnote
/usr/bin/chrt
/usr/bin/col
/usr/bin/colcrt
/usr/bin/colrm
/usr/bin/column
/usr/bin/cytune
/usr/bin/ddate
/usr/bin/fallocate
/usr/bin/flock
/usr/bin/getopt
/usr/bin/hexdump
/usr/bin/i386
/usr/bin/ionice
/usr/bin/ipcmk
/usr/bin/ipcrm
/usr/bin/ipcs
/usr/bin/isosize
/usr/bin/line
/usr/bin/linux32
/usr/bin/linux64
/usr/bin/look
/usr/bin/lscpu
/usr/bin/mcookie
/usr/bin/mesg
/usr/bin/mkzimage_cmdline
/usr/bin/namei
/usr/bin/rename
/usr/bin/renice
/usr/bin/rev
/usr/bin/script
/usr/bin/scriptreplay
/usr/bin/setarch
/usr/bin/setsid
/usr/bin/setterm
/usr/bin/tailf
/usr/bin/taskset
/usr/bin/time
/usr/bin/ul
/usr/bin/uname26
/usr/bin/unshare
/usr/bin/uuidgen
/usr/bin/wall
/usr/bin/whereis
/usr/bin/which
/usr/bin/write
/usr/bin/x86_64
/usr/sbin/addpart
/usr/sbin/delpart
/usr/sbin/fdformat
/usr/sbin/flushb
/usr/sbin/freeramdisk
/usr/sbin/klogconsole
/usr/sbin/ldattach
/usr/sbin/partx
/usr/sbin/rcraw
/usr/sbin/readprofile
/usr/sbin/rtcwake
/usr/sbin/setctsid
/usr/sbin/tunelp

у меня util-linuxверсия 2.19. Примечания к выпуску можно легко найти до версии 2.13 от (28 -августа -2007 ). Не уверен, в чем был смысл или цель этого, на него определенно не было ответа в этом длинном вопросе, за который проголосовали 331 раз.

4
28.01.2021, 15:30
3 ответа

Дано

$ cat file
S,CV0110,1235
S,1234
D,CQ120,3245
P,7894

, затем

$ awk -F, 'BEGIN{OFS=FS} NF<3{$1 = $1 OFS} 1' file
S,CV0110,1235
S,,1234
D,CQ120,3245
P,,7894
6
18.03.2021, 22:34
sed '/,.*,/!s/,/,,/' file
  • /,.*,/!Если строка не содержит двух запятых,
  • s/,/,,/Замените первую запятую двумя запятыми.

Это можно обобщить на большее количество полей. Например, чтобы добавить пустое поле, если в какой-то строке отсутствует 7-е поле,

sed -E '/,(.*,){5}/!s/,/,,/' file
4
18.03.2021, 22:34

Предполагая, что значения в каждом столбце всегда одинаковы.

Если за одной буквой в начале строки следуют 4 цифры и строка заканчивается, добавьте запятую:

sed '/^[A-Z],[0-9]\{4\}$/s/,/,,/' file

Выход:

S,CV0110,1235
S,,1234
D,CQ120,3245
P,,7894
2
18.03.2021, 22:34

Теги

Похожие вопросы