【发布时间】:2015-01-25 02:24:39
【问题描述】:
此语句为我提供了第 1 列中唯一值的计数:
awk -F ',' '{print $1}' infile1.csv | sort | uniq -c | sort -nr > outfile1.csv
它符合我的预期(给出列中唯一值(右)的计数(左)):
117 5
58 0
18 4
14 3
11 1
9 2
但是,现在我想创建一个循环,因此它将遍历所有列。 我试过了:
for i in {1..10}
do
awk -F ',' '{print $$i}' infile.csv | sort | uniq -c | sort -nr > outfile$i.csv
done
这不起作用(它确实生成了一个文件,但包含更多数据)。我认为 print 语句中的变量,就像我尝试使用 print $$i 一样,不是一般的东西,因为我到目前为止还没有遇到它。
我也试过这个:
awk -F ',' '{for(i=1;i<=NF;i++) infile.csv | sort | uniq -c | sort -nr}' > outfile$i.csv
但这根本不会给出任何结果(意味着 infile 和 sort 命令的语法错误)。我确定我以错误的方式使用 for 语句。
理想情况下,我希望代码找到每列的唯一值计数并将它们全部打印在同一个输出文件中。但是,我已经对运行良好的循环感到非常满意。
如果这个解释不够好,请告诉我,我会尽力澄清。
【问题讨论】:
标签: sorting csv for-loop awk uniq