首页 > 解决方案 > 在文件中取 2 列并递归替换它

问题描述

我在一个目录中有 n 个文件以 .dat 的形式存储,我只需要在每一列中取前两列并删除原始列。

我是为一个文件做的

awk '{print $1,$2}' Test.dat > Test.dat.col
rm Test.dat
rename 's/.dat.col/.dat/' Test.dat.col

我怎样才能递归呢?

我在第一部分的失败尝试find *.dat -printf "awk '{print $1,$2}' > \"%f.col\" | sh

标签: shellawkscripting

解决方案


如果你有 GNUawk最新版本,你可以这样做。

awk -i inplace '{print $1,$2}' *.dat

通用解决方案:如果您没有最新版本的 GNUawk,请尝试遵循。

awk -v temp="temp" '
FNR==1{
  if(file){
     close(temp)
     system("mv \047" temp "\047 \047" file "\047")
  }
  file=FILENAME
}
{
  print $1,$2 > (temp)
}
' *.dat

推荐阅读