AWK 不打印结果

AWK 不打印结果

我想awk在 Ubuntu(版本 14.04)中编写一个简单的命令,但它没有返回任何内容。

$ cat sample.csv
001,Text1,Val1
002,Text2,Val2
003,Text3,Val3

$ cat sample.csv|awk -F',''{for (i=0;i<2,i++){gsub(/Text[0-9]/,"Text"\1+i); print $0}}'

不返回任何内容。预期结果应为:

001,Text1,Val1
001,Text2,Val1
002,Text2,Val2
002,Text3,Val2
003,Text3,Val3
003,Text4,Val3

它在装有 Red Hat Linux 的其他机器上运行良好。我需要安装什么才能让它工作吗?shell 是 bash。

$ which awk
/usr/bin/awk

答案1

gawk你的问题与你写的无关你的答案。awk你问题中的脚本完全是错误的,无法工作:

比较您的

cat sample.csv|awk -F',''{for (i=0;i<2,i++){gsub(/Text[0-9]/,"Text"\1+i); print $0}}'

以及一个工作版本

cat sample.csv|awk -F',' '{for (i=0;i<2;i++){gsub(/Text[0-9]/,"Text"$1+i); print $0}}'

我会用这个

awk -F, '{for (i=0;i<2;i++){gsub(/Text[0-9]/,"Text"$1+i); print $0}}' sample.csv

输出

001,Text1,Val1
001,Text2,Val1
002,Text2,Val2
002,Text3,Val2
003,Text3,Val3
003,Text4,Val3

答案2

我不太确定您要做什么,但也许您需要像下面这样的脚本。

awk -F, 'BEGIN{OFS=FS}
{
    match($2,/[0-9]+$/)
    n=substr($2,RSTART,RLENGTH)
    for (i=0;i<2;i++){
        gsub(/[0-9]+$/,n+i,$2)
        print
    }
}' sample.csv

答案3

该命令(问题主体中的命令有一个小问题,我已在下面进行了更正)在安装后运行良好gawk

cat sample.csv|awk -F, '{for (i=0;i<2;i++){gsub(/Text[0-9]/,"Text"$1+i); print $0}}'

执行sudo apt-get install gawk安装gawk

相关内容