如何在不使用grep,sed awk,perl的情况下将剪切和粘贴命令用作单行命令?

时间:2017-10-13 17:08:34

标签: linux unix

注意:避免使用命令 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

请指导我完成这个。谢谢。

2 个答案:

答案 0 :(得分:0)

awkcolumn

awk -F'[[:space:]]*|:' '{$2=$2","$3;$3=""}' file | column -t

答案 1 :(得分:0)

cutpaste (以及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中定义,但在bashzshksh),您使用命名管道,或者更简单,将中间结果保存到文件中(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