我是一个非常新的命令行用户,因此我需要一些帮助来使用awk按列拆分文本文件。对我来说,困难在于我希望ith文件名成为ith列第一行的文本。
这就是我的想法:
awk '{for(i = 2; i <= NF; i++){name= ??FNR == 1 $i?? ;print $1, $i > name}}' myfile.txt
但是我不知道如何设置名称变量...
输入:myfile.txt
'ID' 'sample_1' 'sample_2' ...
'id_1' 1 2 ...
'id_2' 2 3 ...
期望的输出:
sample_1.txt:
'ID' 'sample_1'
'id_1' 1
'id_2' 2
sample_2.txt:
'ID' 'sample_2'
'id_1' 2
'id_2' 3
谢谢
答案 0 :(得分:0)
您应将列标题保留在数组中。
\x27
gensub(/\x27/, "", "g", $i)
是十六进制转义形式的单引号sorted
从列标题中删除单引号,以根据需要命名输出文件。答案 1 :(得分:0)
您可以尝试这个awk:
awk -F'\t' ' # tab as field separator
{
for ( i = 2 ; i <= NF ; i++ ) { # for each record loop from field 2 to last field
if ( NR == 1 ) { # if first record
a[i] = $i # keep each field in array a
gsub ( /^'\''|'\''$/ , "" , a[i] ) # remove quote at start and end in array a
}
print $1 FS $i > a[i]".txt" # print needed field in corresponding file
}
}' myfile.txt