在awk"最后一个下划线后获得角色;如果"声明

时间:2018-03-03 14:33:11

标签: awk

我的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}'

3 个答案:

答案 0 :(得分:0)

使用 awk match()函数:

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

输出:

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

关注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