我有一个文件:
SELECT EmpID,
ValidDate,
GROUP_CONCAT(ValidTime ORDER BY ValidTime ASC) AS logTime
FROM logs
WHERE Processed = 0
GROUP BY EmpID, ValidDate ORDER BY ValidDate ASC
我想要做的是删除第2列中__之后的字符,以获得所需的输出:
col1 col2 col3
118566815 comp120568_c0_seq1_xn1_una_478__176 176
118588302 100034943_0__140 140
118575711 100079758_0__55 55
118545625 10009810_0__57 57
有关如何执行此操作的任何建议吗?
答案 0 :(得分:2)
awk '{split($2,a,/__/);$2=a[1]}1' input
输出:
col1 col2 col3
118566815 comp120568_c0_seq1_xn1_una_478 176
118588302 100034943_0 140
118575711 100079758_0 55
118545625 10009810_0 57
在提出问题之前搜索网站:)您可以找到类似的问题here。
答案 1 :(得分:1)
如上所述,使用双下划线分隔您要移除的最后一组数字,您也可以使用sed
完成此操作:
$ sed 's/__[^ \t]*//' file
col1 col2 col3
118566815 comp120568_c0_seq1_xn1_una_478 176
118588302 100034943_0 140
118575711 100079758_0 55
118545625 10009810_0 57
<强>解释强>
sed 's/find/replace/'
是一般sed
替换。
__[^ \t]*
查找 - 后面的两个下划线和所有字符不 space
或tab
。
replace
什么也没有。
注意:这仅适用于分隔最后一组数字的双下划线。
答案 2 :(得分:0)
说明:
第一个子删除双下划线和以下字符 在零前面,零完好无损。为了使它工作,我必须 表明涉及哪个领域。
第二个子点从下划线开始,但在这里我们留下一个空格。
awk '{sub(/0__.*/,"0",$2)sub(/__176/," ")}1' file
col1 col2 col3
118566815 comp120568_c0_seq1_xn1_una_478 176
118588302 100034943_0 140
118575711 100079758_0 55
118545625 10009810_0 57