在awk“if”语句中的最后一个下划线后获取字符

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在awk“if”语句中的最后一个下划线后获取字符相关的知识,希望对你有一定的参考价值。

我有csv,下面有样本数据。

column1,column2,column3
abc,123,sample_test_FT.txt
abc,123,sample_test_IFT.txt

我只需要打印第3列的最后一个下划线后面的字符等于“I”的行

期望的输出:

column1,column2,column3
abc,123,sample_test_IFT.txt

到目前为止,我已经提出了这个代码,但是不太合适。

awk -v FPAT='([^,]*)|("[^"]*")' -v var1=3 '{if (substr("${var1##*_}",1,1) == "I" ) print; else TRUE}'
答案
awk -v FPAT='([^,]*)|("[^"]*")' 'NR==1; NR>1 && match($3,"_I[^_]*$")'

正则表达式检查_I的存在,并且$3中没有更多的下划线。

另一答案

使用awkmatch()功能:

awk -v FPAT='[^,]+|"[^"]+"' 'NR==1; NR > 1 && match($3, /^[^_]+_[^_]+_I/)' file

输出:

column1,column2,column3
abc,123,sample_test_IFT.txt
另一答案

以下awk也可以在这里提供帮助:

awk -F, 'FNR==1{print;next} {split($3,array,"_");if(substr(array[3],1,1)=="I"){print;next}}'  Input_file

现在也添加非单一衬里形式的解决方案。

awk -F, '
FNR==1{
  print;
  next
}
{
  split($3,array,"_");
  if(substr(array[3],1,1)=="I"){
    print;
    next}
}
'   Input_file

以上是关于在awk“if”语句中的最后一个下划线后获取字符的主要内容,如果未能解决你的问题,请参考以下文章

LINUX awk 语句 awk ' SUM += $1 END print SUM '请问这个要怎么理解,需详细

awk 如何获取每行最后一个字符

awk:^反斜杠不是最后一个字符

sql语句怎么让一个字符串的内容有升序有降序

在awk中怎么把一行中的字符串后的\n去掉

awk 处理字符