【问题标题】:How can i print specific fields, and get last word from last field that contain delimiter in each line我如何打印特定字段,并从每行包含分隔符的最后一个字段中获取最后一个单词
【发布时间】:2021-07-28 19:13:19
【问题描述】:

这可能很简单,但由于我缺乏编程技能,我无法弄清楚如何完成。

我有这样的 file.txt 内容:

1 22 July 2003 Path /Documents/Photo
2 23 July 2003 Path /Documents/Photo
3 24 July 2003 Path /Documents/Photo

我只想打印字段 2,3,4 和最后一个字段的最后一个单词,每行包含分隔符“/”。

像这样:

22 July 2003 Photo
23 July 2003 Photo
24 July 2003 Photo

我已经用 awk 命令尝试过这个,但它从最后一个字段中删除了所有单词。

awk '{ print $2,$3,$4,$(NF=$NF) }'

Lynx:~ root# cat file.txt | awk '{ print $2,$3,$4,$(NF=$NF) }'
22 July 2003
23 July 2003
24 July 2003

如何使用 awk、sed 或 grep 完成此操作?

提前致谢!

【问题讨论】:

  • 我试过了,它会删除'/'之前的所有字段,我只得到最后一个字段的最后一个单词。如果还有其他建议?我会很感激的。谢谢!
  • 请在你的文件上运行cat -v file,看看你里面有没有控制M字符?
  • 谢谢!对于您的建议,我会尝试。

标签: shell awk


【解决方案1】:

另一个

$ awk '{print $2,$3,$4,a[split($NF,a,"/")]}' file

$ awk '{sub(/.*\//,"",$NF); print $2,$3,$4,$NF}'

【讨论】:

  • 啊,这么简单的写split是因为split返回的是item的个数,然后你可以再index成a对吧? ++
  • 我喜欢这条捷径,这也行得通,非常感谢!
【解决方案2】:

可以拆分/上的最后一个字段,从数组中获取最后一项

awk '{ 
i = split($NF,a,"/")
print $2,$3,$4,a[i] 
}' file

输出

22 July 2003 Photo
23 July 2003 Photo
24 July 2003 Photo

您也可以删除所有直到最后一个字段中最后出现的/

awk '{ 
sub(/.*\//, "", $NF)
print $2,$3,$4,$NF
}' file

【讨论】:

    【解决方案3】:

    使用您展示的示例,请尝试以下操作。只需在此处将字段分隔符设置为空格或 / 并打印每行的第 2、第 3、第 4 和最后一个字段的值。

    awk -F'[ /]' '{print $2,$3,$4,$NF}' Input_file
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-07
      • 2014-08-25
      • 1970-01-01
      • 2011-03-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多