转换文本文件中的特定行

时间:2014-10-29 18:35:35

标签: linux awk

我正在使用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.23956indri这个词在哪里?你能为我提出awk命令的不同语法吗?

4 个答案:

答案 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

[ ]中的字段分隔符告诉您使用所使用的一个或另一个字符 您的小数点已经消失,因为您告诉它应该用作分隔符。