创建 if/than 语句以根据 1 列的值将文件移动到另一个位置?

创建 if/than 语句以根据 1 列的值将文件移动到另一个位置?

我有数千个 xyz(纬度、经度、海拔)文本文件,我想按纬度或经度分隔它们。我可以如何以及使用哪些命令来创建“如果纬度(列1)大于-1.00,则移动到此目录”?对于我的原始目录中的所有文件。

我已经使用 grep 或 awk 接近了几个不同的命令,但并不完全按照我想要的方式工作。

文件列表示例

2004_2006-361383_Morecambe_Bay_Heysham_Channel_s.xyz
2004_2006-361385_River_Mersey_Langton_Dock_Entrance_s.xyz
2004_2006-361399_Thames_Estuary_Gore_Channel_s.xyz

这是文件前 10 行的示例,其中许多文件有数百万行

-002.9584650 54.0087979 -5.3
-002.9416586 54.0326371 -1.3
-002.9307806 54.0323594 -8.5
-002.9644657 53.9985145 0.8
-002.9680185 54.0019534 -10
-002.9524820 54.0183868 -5
-002.9439942 54.0179227 -4.2
-002.9569578 54.0183595 -5.4
-002.9372192 54.0224494 -3.2
-002.9535454 54.0178188 -4.3

答案1

如果文件没有有趣的名称(即空格)

全局排序

awk 'FNR==1 { printf "mv %s ../dir%d\n",FILENAME,$1 ; next ; }' * | bash

北/南排序

awk 'FNR==1 { printf "mv %s ../%s\n",FILENAME,$1<0?"south":"north" ; next ; }' * | bash

在哪里

  • FNR == 1对文件第一行进行操作
  • printf并将%d 解析为第 1 列的 int 部分
  • 替换| bash| head -10检查是否OK
  • next将跳过剩余行并转到下一个文件。
  • $1<0?"south":"north"将选择南或北

我猜你想移动整个文件,并且所有纬度都高于或低于 0。

相关内容