使用命令替换和Bash实用程序编辑以空格分隔的数据的字符串列

时间:2013-02-25 14:44:17

标签: bash awk multiple-columns edit

我想使用程序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这样更优雅的东西的有效方法。您对如何处理此问题有什么建议吗?

3 个答案:

答案 0 :(得分:1)

awk '{sub(/.*\//,"",$4)}1' file

答案 1 :(得分:1)

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

如果您喜欢使用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