在下面的文件中,我想将第5列中的月份部分和日期部分用一个空格字符分开。
输入文件:
22144842,860998142,1001409110,DLY,Jan4 2016,13:00,17:00
22084015,860902007,29465297,DLY,Jan4 2016,08:00,12:00
22034081,860845334,1001392391,DLY,Jan3 2016,13:00,17:00
22159924,861029758,1001411656,DLY,Jan3 2016,13:00,17:00
22068143,853558982,1001397841,DLY,Jan2 2016,13:00,17:00
必需的输出文件:
22144842,860998142,1001409110,DLY,Jan 4 2016,13:00,17:00
22084015,860902007,29465297,DLY,Jan 4 2016,08:00,12:00
22034081,860845334,1001392391,DLY,Jan 3 2016,13:00,17:00
22159924,861029758,1001411656,DLY,Jan 3 2016,13:00,17:00
22068143,853558982,1001397841,DLY,Jan 2 2016,13:00,17:00
如何使用AWK语言或sed命令执行此操作?
答案 0 :(得分:3)
awk -F, -v OFS=, '{sub(/.../, "& ", $5)}1' File
或
awk -F, -v OFS=, '{sub(/[A-Za-z]+/, "& ", $5)}1' File
输出:
22144842,860998142,1001409110,DLY,Jan 4 2016,13:00,17:00
22084015,860902007,29465297,DLY,Jan 4 2016,08:00,12:00
22034081,860845334,1001392391,DLY,Jan 3 2016,13:00,17:00
22159924,861029758,1001411656,DLY,Jan 3 2016,13:00,17:00
22068143,853558982,1001397841,DLY,Jan 2 2016,13:00,17:00
将3
字段的第一个/.../
字符(5th
)替换为相同的3个字符(&
),后跟space
。或者,将5th
字段开头的字符序列替换为序列(&
),后跟space
。
答案 1 :(得分:3)
如果你可以在所有情况下都假设一个3个字母的月份名称,并且前面的任何一个字段都没有包含逗号,你应该能够使用sed执行此操作:
sed -r 's/([^,]*,){4}[A-Z][a-z]{2}/& /' file
前四个字段由零个或多个字符描述,这些字符不是逗号[^,]*
后跟逗号。月份名称由大写字母后跟两个小写字母描述。替换是与&
匹配的所有内容,之后添加了空格。
答案 2 :(得分:0)
这可能适合你(GNU sed):
sed -r 's/([^,]{0,3})([^,]*)/\1 \2/5' file
将第五组非分隔符拆分为两个并根据需要进行排列。