如何编写bashshell脚本来遍历一系列文件并提取一列数据?

如何编写bashshell脚本来遍历一系列文件并提取一列数据?,bash,shell,csv,Bash,Shell,Csv,我有一个大约10000个文件的文件夹,我需要编写一个bashshell脚本,它将拉出一列数据并将其放入一个文件中。帮助???请,谢谢 编辑以包括: #!/bin/bash cd /Users/Larry/Desktop/TestFolder find . -maxdepth 1 -mindepth 1 -type d sed '4q;d' 单独的尝试 for dir in /Users/Larry/Desktop/TestFolder do dir=${dir%*/} sed -n

我有一个大约10000个文件的文件夹,我需要编写一个bashshell脚本,它将拉出一列数据并将其放入一个文件中。帮助???请,谢谢

编辑以包括:

#!/bin/bash

cd /Users/Larry/Desktop/TestFolder

find . -maxdepth 1 -mindepth 1 -type d
sed '4q;d'
单独的尝试

for dir in /Users/Larry/Desktop/TestFolder
do
  dir=${dir%*/}
  sed -n '4q;d' > Success.txt
done
这些文件是在电子表格程序中打开的逗号分隔值文件,如电子表格中的数字或Excel。我想从每个文件中提取一列,但每个文件夹中至少有10000个文件,所以参数会导致错误“太长”

又一次尝试

find/Users/Larry/Desktop/modified-type f-maxdepth 1-name'.csv'-print0 | xargs-0awk-f',“{print$2}”find/Users/Larry/Desktop/modified-type f-maxdepth 1-name'.csv'-print0 | xargs-0awk-f'*,“{print$2}”didtworkthistime.csv


指向上一个问题的链接不适用于大型文件集。

如果目录中的文件太多,超出了参数限制,则应使用
find
xargs

find /Users/Larry/Desktop/modified -type f -maxdepth 1 -name '*.csv' -print0 | 
    xargs -0 awk -F '"*,"*' '{print $2}' > Success.txt
尝试:

它应该对找到的每个csv文件执行
awk
,使用逗号分隔字段(
-F,
),打印第二个(
$2
)字段,并将输出重定向到Success.txt


另外,如果您想查看输出并将其保存到文件中,您可以将
>Success.txt
替换为
|tee Success.txt
,至少在您测试命令时是这样,并且不想等待所有这些文件被处理以查看它是否工作。

对您已有的代码进行简单而直接的修改

find /Users/Larry/Desktop/TestFolder -maxdepth 1 -mindepth 1 -type f -name '*.csv' |
xargs cut -f2
如果您想要文件,
-type d
是错误的。我将其更改为
-type f
,并添加了
-name
选项以仅选择
*.csv
文件

for dir in /Users/Larry/Desktop/TestFolder/*
do
  cut -f2 "$dir"/*.csv
done
这是假设
TestFolder
包含多个目录,每个目录都包含一个或多个
*.csv
文件

cut -f2 /Users/Larry/Desktop/TestFolder/*/*.csv
但是,这可能会使您的
参数长度超过您试图避免的
错误


所有这些都将打印到标准输出;在末尾添加
>Success.txt以重定向到文件。

cut-d','-f1,2,3*.csv>result.csv
假设文件中的字段分隔符是
[毕竟是csv文件],并且结果列1、2和3中需要该分隔符


如果所需的列本身具有分隔符:
“…,则上述命令将出现问题。。。,。。。“,

使用
cut
awk
,具体取决于列的分隔方式。如果您希望有人为您编写脚本,那么您来错了地方。我们将帮助您修复您编写的脚本,我们不是编码服务。哈哈,如果我有什么有用的东西,我会发布它。我的代码(多次尝试,还有一个朋友的代码)完全不起作用。如果你有起作用的代码,你就不需要问问题了。发布您尝试过的内容,我们将帮助您实现。要么这样,要么雇佣一个知道自己在做什么的程序员。在这两个脚本中,你都没有使用文件作为
sed
的输入。这肯定是朝着正确方向迈出的一步,但当我在shell中输入命令并按enter键时,什么也没有发生。我也试着把它放在一个shell脚本中运行,但它也没有做任何事情?>是将找到的列放到我可以查看值的地方。find/Users/Larry/Desktop/modified-typef-maxdepth 1-name.csv'-print0 | xargs-0awk-f'““{print$2}”find/Users/Larry/Desktop/modified-typef-maxdepth 1-name.csv'-print0 | xargs-0awk-f'”,“{print$2}'>didtworkthistime.csv
'.csv
应该是
'.*.csv>,如果这是您实际键入的,您需要将代码放在注释的反勾号中。否则,
*
将用于斜体和粗体字。最好在您的问题中添加一个更新,显示您的尝试。然后您可以使用SO编辑器中的
{}
工具对其进行良好的格式化。陌生人,我爱你。上面说我不能投赞成票,但如果我愿意,我会投的。无限的投票!
cut -f2 /Users/Larry/Desktop/TestFolder/*/*.csv