如何使用AWK命令“。”删除包括分隔符的列?

时间:2014-04-23 14:09:00

标签: awk

我有一个像这样的输入文件:

01.gold 1 1986 USA American Eagle
02.gold 1 1908 Austria-Hungary Franz Josef 100 Korona
03.silver 10 1981 USA ingot
04.gold 1 1984 Switzerland ingot

我想删除之前和之后的字段"。"。所需的输出是:

gold 1 1986 USA American Eagle
gold 1 1908 Austria-Hungary Franz Josef 100 Korona
silver 10 1981 USA ingot
gold 1 1984 Switzerland ingot 

请解释一下。 提前致谢。 :)

2 个答案:

答案 0 :(得分:2)

在我看来,

sed会更容易。

$ sed 's/^.*\.//' file
gold 1 1986 USA American Eagle
gold 1 1908 Austria-Hungary Franz Josef 100 Korona
silver 10 1981 USA ingot
gold 1 1984 Switzerland ingot

^.*\.表示查看开头并匹配任何字符,直到您看到文字.。什么都不用。

awk的几种方式:

逻辑类似于上面给出的sed。使用sub功能。

$ awk '{sub(/.*\./,"")}1' file
gold 1 1986 USA American Eagle
gold 1 1908 Austria-Hungary Franz Josef 100 Korona
silver 10 1981 USA ingot
gold 1 1984 Switzerland ingot

这个很棘手,如果你的字符串中有.次多次,可能会中断。

$ awk -F'.' '{print $2}' file
gold 1 1986 USA American Eagle
gold 1 1908 Austria-Hungary Franz Josef 100 Korona
silver 10 1981 USA ingot
gold 1 1984 Switzerland ingot

从评论(谢谢Ed):

$ cut -d'.' -f2- file
gold 1 1986 USA American Eagle
gold 1 1908 Austria-Hungary Franz Josef 100 Korona
silver 10 1981 USA ingot
gold 1 1984 Switzerland ingot

答案 1 :(得分:0)

她是另一个awk

awk 'BEGIN {FS=OFS="."} {$1=""; sub(/\./, "")}'1  file
gold 1 1986 USA American Eagle
gold 1 1908 Austria-Hungary Franz Josef 100 Korona
silver 10 1981 USA ingot
gold 1 1984 Switzerland ingot