我要求根据第一列的值生成文件(单个文件)。
源文件就像
Batch No ; Values
-------------------
B1 ; TEST1
B1 ; TEST2
B1 ; TEST3
B2 ; DELTA1
B2 ; DELTA2
预期的输出将是两个文件
B1.txt(其中包含)
TEST1
TEST2
TEST3
B2.txt(包含其中)
DELTA1
DELTA1
源文件数据每次都会变化,但结构(列数和定界符)将保持一致
有什么建议吗?
答案 0 :(得分:0)
您可以为此使用awk。
awk -F" *; *" 'NR > 2{print $2 > $1 ".txt"}' source.txt
这假设您的源文件是source.txt
,并且包含
Batch No ; Values
-------------------
B1 ; TEST1
B1 ; TEST2
B1 ; TEST3
B2 ; DELTA1
B2 ; DELTA2
结果是两个文件:B1.txt
和B2.txt
-F" *; *"
:定义字段分隔符。在这种情况下,分号以及分号前后的任意数量的空格。NR > 2
:您跳过了前两行。$1
,$2
分别存储第一和第二列的内容。>
,您可以将print
命令的输出重定向到相应的文件,而不是打印到标准输出。答案 1 :(得分:0)
这是一个带有awk的衬板:
tail -n +3 test.txt | awk '{print $3>$1".txt"}'
尾部-n +3
删除标题的前两行; awk脚本在以.txt
默认的awk字段分隔符是空格,因此在您的示例中,;
是我们删除的字段#2。输入文件甚至不必按第一个字段进行排序。
答案 2 :(得分:0)
#!/bin/bash
while read -r file data; do
echo "${data#; *}" >> "$file".txt
done < <(sed -n -e '1,/^---/!p' source_file)