分别保存打印和哈希输出



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列(


编辑:上面给出的答案有点多余。参考下面的评论


最新更新