Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 如何在Unix中基于列名移动文件?_Bash_Unix_Sh - Fatal编程技术网

Bash 如何在Unix中基于列名移动文件?

Bash 如何在Unix中基于列名移动文件?,bash,unix,sh,Bash,Unix,Sh,我的in文件夹中有500个.xls文件。在该文件夹中,我有两组不同的文件。 对于(例如)某些文件有一个提取列“Package Name”,而其他文件则没有。 所以现在我想通过unix将“Package Name”列文件移动到某个单独的文件夹中。谢谢您可以使用Perl模块解析电子表格。在Ubuntu上,您必须使用安装模块 apt-get install libspreadsheet-read-perl 以下代码是一个非常简单的电子表格grep: #! /usr/bin/perl use stri

我的in文件夹中有500个.xls文件。在该文件夹中,我有两组不同的文件。 对于(例如)某些文件有一个提取列“Package Name”,而其他文件则没有。
所以现在我想通过unix将“Package Name”列文件移动到某个单独的文件夹中。谢谢

您可以使用Perl模块解析电子表格。在Ubuntu上,您必须使用安装模块

apt-get install libspreadsheet-read-perl
以下代码是一个非常简单的电子表格grep:

#! /usr/bin/perl
use strict;
use warnings;
use Spreadsheet::Read;

my $book = ReadData ($ARGV[1]);
my @row = Spreadsheet::Read::row ($book->[1], 1);

for my $cel (@row)
{
  exit 0 if $cel eq $ARGV[0];
}
exit 1;
如果搜索字符串位于电子表格的第一行,则程序返回0,否则返回1

我使用了以下电子表格进行测试

使用上述程序,您可以循环浏览文件

for f in *.xlsx; do
  if spreadsheet-grep 'Package Name' "$f"; then
    mv "$f" /tmp/.
  fi
done

您首先需要一些东西来处理XLS格式,我怀疑shell是否是处理XLS格式的最佳环境。如果您可以更改格式(可能使用批处理转换器),CSV将很容易阅读,并且XLSX和打开的文档格式都是可行的。我正在使用此cmd…但它不会复制我的目标路径grep-rl-null——包括'*.xls'包。|xargs-0r cp-t/my path您知道这将在不包含任何包的文件上进行筛选,而不仅仅是在头中,对吗?无论如何,要调试命令,请在
cp
之前添加
echo
,并检查生成的命令是否正确