我正在使用Linux,我有一个包含以下行的文本文件:
1 Q0 /home/nikol123/Downloads/metadata/12/119317.xml 1 -6.23956 indri
1 Q0 /home/nikol123/Downloads/metadata/20/194709.xml 2 -6.47239 indri
1 Q0 /home/nikol123/Downloads/metadata/13/120365.xml 3 -6.73307 indri
2 Q0 /home/nikol123/Downloads/metadata/25/241886.xml 2 -6.53499 indri
2 Q0 /home/nikol123/Downloads/metadata/18/175920.xml 3 -6.65065 indri
........
我想将其转换为:
1 Q0 119317 1 -6.23956 indri
1 Q0 194709 2 -6.47239 indri
1 Q0 120365 3 -6.73307 indri
2 Q0 241886 2 -6.53499 indri
2 Q0 175920 3 -6.65065 indri
........
我尝试了这样的awk命令:
awk -F'[/ / / / / / . ]' '{print $1 " " $2 " " $9 " " $11 " " $12$13 " " $15}
但我得到第一行的结果,例如:
1 Q0 119317 1 -623956
所以我想知道-623956
中的小数点在哪里?它应该是-6.23956
。 indri
这个词在哪里?你能为我提出awk
命令的不同语法吗?
答案 0 :(得分:1)
<强> SED 强>
sed -e 's|^\([0-9]\sQ0\).*/home.*/\(.*\).xml\s\(.*\)$|\1 \2 \3|' /path/to/file
<强> AWK 强>
awk '{gsub(/\/home.*\/|.xml/, "")}; 1' /path/to/file
答案 1 :(得分:1)
将答案更改为:
$ sed -E 's/\/[\/[a-zA-Z0-9]*\/|\.xml//g' file.txt
将file.txt
替换为文件路径
适用于GNU sed version 4.2.1
答案 2 :(得分:1)
nawk '{gsub(/\/home.*\//,"",$3); sub(".xml","",$3)}1' file
答案 3 :(得分:0)
要跟进awk
,您可以执行以下操作:
awk -F"[ /.]" '{print $1,$2,$9,$11,$12"."$13,$14}' file
1 Q0 119317 1 -6.23956 indri
1 Q0 194709 2 -6.47239 indri
1 Q0 120365 3 -6.73307 indri
2 Q0 241886 2 -6.53499 indri
2 Q0 175920 3 -6.65065 indri
[ ]
中的字段分隔符告诉您使用所使用的一个或另一个字符
您的小数点已经消失,因为您告诉它应该用作分隔符。