0

プログラムのベース名(または他のプログラム)を使用して、空白で区切られたデータの1つの列の各文字列に変更を適用したいと思います。具体的には、次のような形式のデータがあります。

string string string /afs/address/user/directory1 string string string string

データ(4列目の文字列)を次のように変更したいと思います。

string string string directory1 string string string string

これは、4番目の列の各行に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 に答える