awk系统调用

rar*_*dea 11 bash awk

我想使用awk和system()函数来移动几个目录.

我有一个文件,我想用awk名称进行处理,file.cfg其组织方式如下:

/path1 /path2 
/some_path /some_other_path 
and so on..
Run Code Online (Sandbox Code Playgroud)

每个第一条路径都通过空格与第二条路径分开所以这就是我做的方式:

awk '{system(mv -R $1" "$2)}' file.cfg
Run Code Online (Sandbox Code Playgroud)

但它没有用,我得到了

sh: 0/home/my_user/path1: No such file or directory
Run Code Online (Sandbox Code Playgroud)

file.cfg看起来像这样:

/home/my_user/path1 /home/my_user/path2
Run Code Online (Sandbox Code Playgroud)

之前没有0 /home.那我在这里错过了什么?

Jon*_*oni 21

你必须引用你给出的命令system:

awk '{system("mv -R " $1 " " $2)}' file.cfg
Run Code Online (Sandbox Code Playgroud)

当前mv -R被解释为变量mv的值减去R的值,0因为两者都没有被定义.


小智 5

为什么不直接使用xargs?

cat file.cfg | xargs -n 2 mv
Run Code Online (Sandbox Code Playgroud)

这会将您的文件中的标记(由空格分隔)以两个为一组传递给mv.

  • @axesdenied告诉你使用awk的人不知道他们在说什么.别再听了.如果是老师,请退还款项. (4认同)
  • 我的[测试](https://gist.github.com/schlueter/ae4c9f5510110c5358db074779df3b3c)实际上表明xargs方法更快:重复每个`cat配对词 | xargs -n2 mv`、`awk '{system("mv " $1 " " $2)}' 配对词`,以及一个额外的 `cat 配对词 | xargs -n2 -P8 mv` 100x 导致第一个的时间大约是第二个的一半,是第二个的两倍。我怀疑这是由于 xargs 部分具有出色的缓冲和并行性。 (2认同)