0

我想使用程序基本名称(或其他程序)对空格分隔数据中一列的每个字符串进行更改。具体来说,我有如下形式的数据:

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 之类的有效方法会更优雅。你对如何解决这个问题有什么建议吗?

4

3 回答 3

1
awk '{sub(/.*\//,"",$4)}1' file
于 2013-02-25T14:47:41.803 回答
1

ED 的解决方案应该适合您。

如果您喜欢使用basename

awk '{"basename "$4|getline $4}1' file
于 2013-02-25T14:53:39.020 回答
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
于 2013-02-25T18:24:40.497 回答