2017-10-13 109 views
-1

注意:避免命令的grep,sed的awk的,perl的如何使用剪切和粘貼命令作爲單行命令而不使用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文件粘貼,當我的貓filenew,結果應該如下,

harris, charles 
johnson, bill 
dylan, robert 
woodcock, john 
wood, barry 

請指導我完成此操作。謝謝。

+0

以下答案有什麼好運氣? – randomir

回答

0

隨着awkcolumn

awk -F'[[:space:]]*|:' '{$2=$2","$3;$3=""}' file | column -t 
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 

如果您需要還有包括最後一個名字和一個名字之間的空格,您可以從三個來源(中間一個爲空來源,如/dev/null或更短的<(:) - 空過程替換中的命令)paste,並重復使用兩個列表中的分隔符(逗號和空格):

$ 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