如何在打印值时删除awk空间

如何在打印值时删除awk空间,awk,Awk,我有一个test.csv #cat test.csv a.b.c.d a.b a.b.c a-a.b.c a-a.b (1) 我试图打印第一个点之后的所有值,(2)不得打印最后一个点 我在下面尝试了一下,但它给出了空格,实际的文件大约有10亿条记录,你知道我怎么可以不带点打印吗 #cat test.csv | awk -F. '{print $2,".",$3}' b . c b . b . c b . c b . 期望输出 b.c.d b b.c b.c

我有一个test.csv

#cat test.csv
a.b.c.d
a.b
a.b.c
a-a.b.c          
a-a.b

(1) 我试图打印第一个点之后的所有值,(2)不得打印最后一个点

我在下面尝试了一下,但它给出了空格,实际的文件大约有10亿条记录,你知道我怎么可以不带点打印吗

#cat test.csv | awk -F. '{print $2,".",$3}' 
b . c
b . 
b . c
b . c
b . 
期望输出

b.c.d
b
b.c
b.c          
b

请您尝试以下,书面和测试显示的样品

awk 'BEGIN{FS=OFS="."} NF>=3{print $2,$3;next} NF==2{print $2}' Input_file
解释:添加上述代码的详细解释

awk '                ##Starting awk program from here.
BEGIN{               ##Starting BEGIN section of this awk program from here.
  FS=OFS="."         ##Setting FS and OFS as DOT(.) here.
}
NF>=3{               ##Checking condition if number of fields greater than 3 then do following.
  print $2,$3        ##Printing 2nd and 3rd field values here.
  next               ##next will skip all further statements from here.
}
NF<=2{               ##Checking if number of fields is lesser than 2 then do following.
  print $2           ##Printing 2nd field here.
}
' Input_file         ##Mentioning Input_file name here.
awk'##从这里启动awk程序。
开始{##从这里开始这个awk程序的开始部分。
FS=OFS=“.”##此处将FS和OFS设置为点(.)。
}
NF>=3{##如果字段数大于3,则检查条件,然后执行以下操作。
打印$2、$3##在此处打印第二和第三个字段值。
next##next将跳过此处的所有进一步语句。
}

NF请您尝试以下内容,并用显示的样本进行书写和测试

awk 'BEGIN{FS=OFS="."} NF>=3{print $2,$3;next} NF==2{print $2}' Input_file
解释:添加上述代码的详细解释

awk '                ##Starting awk program from here.
BEGIN{               ##Starting BEGIN section of this awk program from here.
  FS=OFS="."         ##Setting FS and OFS as DOT(.) here.
}
NF>=3{               ##Checking condition if number of fields greater than 3 then do following.
  print $2,$3        ##Printing 2nd and 3rd field values here.
  next               ##next will skip all further statements from here.
}
NF<=2{               ##Checking if number of fields is lesser than 2 then do following.
  print $2           ##Printing 2nd field here.
}
' Input_file         ##Mentioning Input_file name here.
awk'##从这里启动awk程序。
开始{##从这里开始这个awk程序的开始部分。
FS=OFS=“.”##此处将FS和OFS设置为点(.)。
}
NF>=3{##如果字段数大于3,则检查条件,然后执行以下操作。
打印$2、$3##在此处打印第二和第三个字段值。
next##next将跳过此处的所有进一步语句。
}
法国试验标准
[^.]
表示除
字符以外的任何字符
\。
字符(需要转义,因为它在正则表达式中有特殊含义)


[^.]
表示除
字符以外的任何字符
\。
字符(需要转义,因为它在正则表达式中有特殊含义)。

输出中的空格是因为您告诉awk添加空格。print语句中的每个
都是告诉awk在输出中的该位置添加
OFS
变量的值(默认为一个空白字符)。而不是:

awk -F. '{print $2,".",$3}'
请尝试以下任一方法:

awk -F. '{print $2"."$3}'
awk 'BEGIN{FS=OFS="."} {print $2,$3}'
要使用awk获得所需的输出,请执行以下操作:

awk '{sub(/[^.]*\./,"")}1'
但我真的建议你使用为这项任务设计的工具,切割:

cut -d'.' -f2-

输出中的空格是因为您告诉awk添加空格。print语句中的每个
都是告诉awk在输出中的该位置添加
OFS
变量的值(默认为一个空白字符)。而不是:

awk -F. '{print $2,".",$3}'
请尝试以下任一方法:

awk -F. '{print $2"."$3}'
awk 'BEGIN{FS=OFS="."} {print $2,$3}'
要使用awk获得所需的输出,请执行以下操作:

awk '{sub(/[^.]*\./,"")}1'
但我真的建议你使用为这项任务设计的工具,切割:

cut -d'.' -f2-

“打印第一个点后的所有值”>第一行的预期输出与您的description@Quasímodo谢谢,我只是纠正你的问题,要么解释
最后一个点,要么删除该语句,因为它不清楚你的意思,并且你输入的每一行上的最后一个点确实显示在你的预期输出中。“打印第一个点之后的所有值”>第一行的预期输出不符合您的要求description@Quasímodo谢谢,我只是纠正你的问题,要么解释
最后一点不能打印
,要么删除该语句,因为它不清楚你的意思,并且你输入的每一行上的最后一点确实显示在你的预期输出中。