我想使用程序basename(或其他一些程序)对空格分隔数据中的一列的每个字符串应用更改。具体来说,我的数据格式如下:
string string string /afs/address/user/directory1 string string string string
我想更改数据(第四列中的字符串),使其显示如下:
string string string directory1 string string string string
这可以使用诸如第四列的每一行上的basename之类的程序来实现。我想要的解决方案将包含某种命令替换,以便我可以使用除basename之外的一些程序来编辑列的每一行。因此,解决方案中可能会出现以下内容:
"$(basename $4)",
其中$ 4表示第4列中的一行。我想我知道如何使用效率低下的代码明确地循环每一行,但我想有一种使用像awk这样更优雅的东西的有效方法。您对如何处理此问题有什么建议吗?
答案 0 :(得分:1)
awk '{sub(/.*\//,"",$4)}1' file
答案 1 :(得分:1)
如果您喜欢使用basename
:
awk '{"basename "$4|getline $4}1' file
答案 2 :(得分:0)
如果其他列都没有包含斜杠,则可以使用 / 作为字段分隔符并打印第一个和最后一个字段:
awk -F / '{print $1 $NF}' <<< "string string string /afs/address/user/directory1 string string string string"
输出
string string string directory1 string string string string