注意:避免使用命令 grep,sed awk,perl
在Unix中,我正在尝试编写一系列剪切和粘贴命令(将每个命令的结果保存在文件中),该命令会反转文件(下面)列表中的每个名称,并在姓氏后面放置一个昏迷(例如,比尔约翰逊成为约翰逊,比尔)。
这是我的文件候选名单:
2233:charles harris :g.m. :sales :12/12/52: 90000
9876:bill johnson :director :production:03/12/50:130000
5678:robert dylan :d.g.m. :marketing :04/19/43: 85000
2365:john woodcock :director :personnel :05/11/47:120000
5423:barry wood :chairman :admin :08/30/56:160000
我可以从候选名单中删除,但不知道如何在同一命令行中将其粘贴到我的filenew文件中。这是我的剪切代码:
cut -d: -f2 shortlist
结果:
charles harris
bill johnson
robert dylan
john woodcock
barry wood
现在我希望将它粘贴到我的filenew文件中,当我cat filenew时,结果应该如下所示,
harris, charles
johnson, bill
dylan, robert
woodcock, john
wood, barry
请指导我完成这个。谢谢。
答案 0 :(得分:0)
awk
和column
:
awk -F'[[:space:]]*|:' '{$2=$2","$3;$3=""}' file | column -t
答案 1 :(得分:0)
仅 cut
和paste
(以及process substitution <(cmd)
):
$ paste -d, <(cut -d: -f2 file | cut -d' ' -f2) <(cut -d: -f2 file | cut -d' ' -f1)
harris,charles
johnson,bill
dylan,robert
woodcock,john
wood,barry
如果您的shell中流程替换 不可用(因为它未在POSIX中定义,但在bash
,zsh
和ksh
),您使用命名管道,或者更简单,将中间结果保存到文件中(first
保留名字,last
仅保留姓氏):
$ cut -d: -f2 file | cut -d' ' -f1 >first
$ cut -d: -f2 file | cut -d' ' -f2 >last
$ paste -d, last first
如果您还需要在姓氏和名字之间加上之间的空格,您可以从三个来源paste
(中间一个是空来源,如/dev/null
,或更短的<(:)
- 进程替换中的null命令),并重用两个列表中的分隔符(逗号和空格):
$ paste -d', ' <(cut -d: -f2 file | cut -d' ' -f2) <(:) <(cut -d: -f2 file | cut -d' ' -f1)
harris, charles
johnson, bill
dylan, robert
woodcock, john
wood, barry