awk和linux环境的新功能
Store Sales ID
X 500 A1
X 600 A1
Y 200 A2
Z 300 A3
...
我有一个csv文件,我正在读取其中的$2列,并将其保存到文件"book.csv"。同时,我正在创建一个列$3的哈希文件,并将它保存为"ID.csv"。如何在同一命令中做到这一点?基本上将这两者合二为一。
awk -F '{ print $2 }' raw.csv > book.csv
awk -F '{a[$3]}END{for (x in a) print x}' raw.csv > ID.csv
$ awk '{print $2 > "book.csv"} !seen[$3]++{print $3 > "ID.csv"}' raw.csv
$ cat book.csv
Sales
500
600
200
300
$ cat ID.csv
ID
A1
A2
A3
请注意,使用>
并不意味着每次都会覆盖该文件。如果文件在执行awk命令之前就已经存在,这种情况只会发生一次。如果要附加到现有文件,请使用>>
。
基于列名动态保存文件
for i in 2 3; do
column_name=$(cat raw.csv | awk "{print $$i}" | head -n 1)
cat raw.csv | awk "{print $$i}" | tee $column_name.csv
done
创建Sales.csv
(第2列(ID.csv
(第3列(
编辑:上面给出的答案有点多余。参考下面的评论