使用 unix 文件中的唯一列拆分为多个文件

使用 unix 文件中的唯一列拆分为多个文件

我需要sample.csv使用唯一列将以下文件 ( ) 拆分为多个文件(前 3 个是唯一列)

样本.csv

123|22|56789|ABCDEF|12AB34|2019-07-10|2019-07-10|443.3400|1|1
123|12|5679|BCDEFG|34CD56|2019-07-10|2019-07-10|896.7200|1|2
123|12|5679|CDEFGH|45DE67|2019-07-10|2019-07-10|680.9200|1|1
123|22|56789|DEFGHI|56EF78|2019-07-10|2019-07-10|405.8800|1|2

所需的输出文件应如下所示

样本_123_22_56789.csv

123|22|56789|ABCDEF|12AB34|2019-07-10|2019-07-10|443.3400|1|1
123|22|56789|DEFGHI|56EF78|2019-07-10|2019-07-10|405.8800|1|2

样本_123_12_5679.csv

123|12|5679|BCDEFG|34CD56|2019-07-10|2019-07-10|896.7200|1|2
123|12|5679|CDEFGH|45DE67|2019-07-10|2019-07-10|680.9200|1|1

我正在使用下面的命令,它正在工作,但希望使其通用而不是硬编码$4"|"$5"|"$6"|"$7"|"$8"|"$9"|"$10

awk -F\| '{print $4"|"$5"|"$6"|"$7"|"$8"|"$9"|"$10 > 
 sample_"$1"_"$2"_"$3".CSV"}' sample.csv

更新#1

感谢您的回复,并对造成的困惑表示歉意,我想要的输出如下(不包括前 3 列)。

样本_123_22_56789.csv

ABCDEF|12AB34|2019-07-10|2019-07-10|443.3400|1|1 DEFGHI|56EF78|2019-07-10|2019-07-10|405.8800|1|2 

样本_123_12_5679.csv

BCDEFG|34CD56|2019-07-10|2019-07-10|896.7200|1|2 CDEFGH|45DE67|2019-07-10|2019-07-10|680.9200|1|1

答案1

如果“通用”的意思是列数可以更改,并且您总是希望将所有列写入名称由前 3 个字段定义的文件中,那么您可以尝试以下操作:

awk -F\| '{
            data=$4
            for(i=5;i<=NF;i++){
                data = data"|"$(i)
            }
            print data > "sample_"$1"_"$2"_"$3".CSV"}' sample.csv

当然,这就是你的命令正在做的事情。这不会产生您问题中所示的所需输出,但这是因为所需的输出与您的命令不匹配。如果你想包括全部输出中的字段,如示例中所示,请改用:

awk -F\| '{
            data=$1
            for(i=2;i<=NF;i++){
                data = data"|"$(i)
            }
            print data > "sample_"$1"_"$2"_"$3".CSV"}' sample.csv

答案2

尝试使用以下命令,效果很好

for i in `awk -F "|" '{if (!seen[$2]++)print $2}' file2.txt `; do awk -v i="$i" -F "|" '$2==i{print $0}' file2.txt >sample_123_"$i"_56789.csv; done

输出

praveen:~$ cat sample_123_22_56789.csv 
123|22|56789|ABCDEF|12AB34|2019-07-10|2019-07-10|443.3400|1|1
123|22|56789|DEFGHI|56EF78|2019-07-10|2019-07-10|405.8800|1|2


 cat sample_123_12_56789.csv 
123|12|5679|BCDEFG|34CD56|2019-07-10|2019-07-10|896.7200|1|2
123|12|5679|CDEFGH|45DE67|2019-07-10|2019-07-10|680.9200|1|1

相关内容