可以用一行awk做到:
$cat test.tsv
field1 field2 field3 field4
asdf asdf asdf asdf
lkjlkj lkjlkj lkjlkj lkjlkj
feh feh feh bmeh
$awk -F'' 'NR==1 { for(i=1;i<=NF;i++) { names[i] = $i }; next } { for(i=1;i<=NF;i++) print $i >> names[i] }' test.tsv
$ls
field1 field2 field3 field4 test.tsv
$cat field4
asdf
lkjlkj
bmeh
编辑包括Tab分离器礼貌Glenn Jackman
加成
从字段中删除双引号:
awk -F'' 'NR==1 { for(i=1;i<=NF;i++) { names[i] = $i }; next } { for(i=1;i<=NF;i++) {gsub(/"/,"",$i); print $i >> names[i] }}' example.tsv
额外增加
从字段中删除双引号,仅在字段的开头或结尾处:
awk -F'' 'NR==1 { for(i=1;i<=NF;i++) { names[i] = $i }; next } { for(i=1;i<=NF;i++) {gsub(/^"|"$/,"",$i); print $i >> names[i] }}' example.tsv