简体   繁体   English

AWK SED处理文本以将其排序为CSV

[英]AWK SED Manipulate text to sort it as CSV

I have this input file 我有这个输入文件

SHARED FOLDER: \\SERVERC1\"uh4" 

Share name        \\SERVERC1\uh4
Path              C:\vol\CN_FS4\CN_QT01\FILESERVER43\userhome
Remark            
Maximum users     No limit
Users             0
Permissions:
WINDOM\NASCIFSMIG01:  FULL CONTROL
WINDOM\ADMINDA14b  :  FULL CONTROL
WINDOM\ADMINDA16   :  FULL CONTROL
The command completed successfully.
============================================================================================================  
SHARED FOLDER: \\SERVERC1\"uh5" 

Share name        \\SERVERC1\uh5
Path              C:\vol\CN_FS2\CN_QT01\FILESERVER01\userhome
Remark            
Maximum users     No limit
Users             0
Permissions:
WINDOM\NASCIFSMIG01:  FULL CONTROL
WINDOM\ADMINDA14b  :  FULL CONTROL
WINDOM\ADMINDA20   :  FULL CONTROL
The command completed successfully.
============================================================================================================  

I need this output : 我需要这个输出:

\\SERVERC1\uh4;C:\vol\CN_FS4\CN_QT01\FILESERVER43\userhome;WINDOM\NASCIFSMIG01:  FULL CONTROL;WINDOM\ADMINDA14b  :  FULL CONTROL;WINDOM\ADMINDA16   :  FULL CONTROL
\\SERVERC1\uh5;C:\vol\CN_FS2\CN_QT01\FILESERVER01\userhome;WINDOM\NASCIFSMIG01:  FULL CONTROL;WINDOM\ADMINDA14b  :  FULL CONTROL;WINDOM\ADMINDA20   :  FULL CONTROL

Do you have any suggestion? 你有什么建议吗? I have no idea how to do it. 我不知道该怎么做。 I tried to do: sed -n "/Permissions:/,/The command completed succesfully/p" to get the permissions only but doesn't work. 我试图做:sed -n“ / Permissions:/,/命令成功完成/ p”,仅获得许可,但不起作用。

Through grep and paste, 通过grep和粘贴,

$ grep -oP '^(Share name|Path)\s+\K.*|^WINDOM\\.*' file | paste -d';' - - - - -
\\SERVERC1\uh4;C:\vol\CN_FS4\CN_QT01\FILESERVER43\userhome;WINDOM\NASCIFSMIG01:  FULL CONTROL;WINDOM\ADMINDA14b  :  FULL CONTROL;WINDOM\ADMINDA16   :  FULL CONTROL
\\SERVERC1\uh5;C:\vol\CN_FS2\CN_QT01\FILESERVER01\userhome;WINDOM\NASCIFSMIG01:  FULL CONTROL;WINDOM\ADMINDA14b  :  FULL CONTROL;WINDOM\ADMINDA20   :  FULL CONTROL
sed -nE 's/^Share name *(\\\\.*)/\1;/p;s/^Path *(.*)$/\1;/p;s/^WINDOM.*/&;/p' input.txt | tr -d "\n" | sed 's/;\\\\/;\n\\\\/g' | sed 's/;$//'

Output: 输出:

\\SERVERC1\uh4;C:\vol\CN_FS4\CN_QT01\FILESERVER43\userhome;WINDOM\NASCIFSMIG01:  FULL CONTROL;WINDOM\ADMINDA14b  :  FULL CONTROL;WINDOM\ADMINDA16   :  FULL CONTROL
\\SERVERC1\uh5;C:\vol\CN_FS2\CN_QT01\FILESERVER01\userhome;WINDOM\NASCIFSMIG01:  FULL CONTROL;WINDOM\ADMINDA14b  :  FULL CONTROL;WINDOM\ADMINDA20   :  FULL CONTROL

Here is an awk version, all done in one command. 这是awk版本,所有操作均在一个命令中完成。

awk '{i++} i==3 {d=$3} i==4 {d=d";"$2} i>8 && i<12 {d=d";"$0} /===/{print d;i=d=""}' file

\\SERVERC1\uh4;C:\vol\CN_FS4\CN_QT01\FILESERVER43\userhome;WINDOM\NASCIFSMIG01:  FULL CONTROL;WINDOM\ADMINDA14b  :  FULL CONTROL;WINDOM\ADMINDA16   :  FULL CONTROL
\\SERVERC1\uh5;C:\vol\CN_FS2\CN_QT01\FILESERVER01\userhome;WINDOM\NASCIFSMIG01:  FULL CONTROL;WINDOM\ADMINDA14b  :  FULL CONTROL;WINDOM\ADMINDA20   :  FULL CONTROL

Shorten some: 缩短一些:

awk '++i==3{d=$3} i==4{d=d";"$2} i>8&&i<12{d=d";"$0} /===/{print d;i=d=""}' file

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM