如何在从文本文件中的值派生的.csv文件中创建单独的变量?
如果您能就如何在UNIX命令行中运行以下命令提供任何建议,我将不胜感激。基本上,我的每个主题都有文本文件,如下所示(模拟数据) 主题ID包含在文本文件标题中(例如“100012_var.txt”) 我想写一个.csv文件,其中一行中的每个值(对于每个主题)都显示在一个新的变量标题下。例如:如何在从文本文件中的值派生的.csv文件中创建单独的变量?,csv,unix,awk,text-files,Csv,Unix,Awk,Text Files,如果您能就如何在UNIX命令行中运行以下命令提供任何建议,我将不胜感激。基本上,我的每个主题都有文本文件,如下所示(模拟数据) 主题ID包含在文本文件标题中(例如“100012_var.txt”) 我想写一个.csv文件,其中一行中的每个值(对于每个主题)都显示在一个新的变量标题下。例如: ID Var1 Var2 Var3 Var4 Var5 Var6 Var7 Var8 Var9 100012 2.97 3.61 -
ID Var1 Var2 Var3 Var4 Var5 Var6 Var7 Var8 Var9
100012 2.97 3.61 -1.88 -0.38 2.33 -0.22 0.76 -0.71 -0.97
100013 -1.21 1.79 -0.88 -0.91 2.01 2.88 0.32 -1.15 2.70
我还想确保这在所有受试者中是一致的,即第1行中的值1始终编码为VAR 1
如果有任何建议,我将不胜感激 使用Miller()和perl
您将拥有(这是一个CSV)
然后可以对所有文件执行for循环。使用awk:
$ awk -v RS="" -v OFS="\t" ' # using whole file as a record *
NR==1 { # first record, build the header
printf "ID" OFS
for(i=1;i<=NF;i++)
printf "Var%d%s",i,(i<NF?OFS:ORS)
}
{
split(FILENAME,f,"_") # split filename by _ to get the number
$1=$1 # rebuild the record to use tabs (OFS)
print f[1],$0 # print number part and the values
}' 100012_var.txt 100013_var.txt # them files
*
-v RS=“”
已解释。谢谢你的建议,詹姆斯!如何将脚本的输出转换为.csv文件?只需将输出重定向到新文件,ilkeawk…>输出文件.tsv
mlr --n2x --ifs ' ' --repifs put '$file=FILENAME' then reorder -f file input.tsv | \
perl -p -e 's/^\r\n$//g' | \
mlr --n2c --ifs ' ' --repifs uniq -a then cut -f 2 then cat -n then reshape -s n,2 \
then rename 1,ID then rename -r '([0-9]+),VAR\1'
ID,VAR2,VAR3,VAR4,VAR5,VAR6,VAR7,VAR8,VAR9,VAR10
input.tsv,2.97,3.61,-1.88,-0.38,2.33,-0.22,0.76,-0.71,-0.97
$ awk -v RS="" -v OFS="\t" ' # using whole file as a record *
NR==1 { # first record, build the header
printf "ID" OFS
for(i=1;i<=NF;i++)
printf "Var%d%s",i,(i<NF?OFS:ORS)
}
{
split(FILENAME,f,"_") # split filename by _ to get the number
$1=$1 # rebuild the record to use tabs (OFS)
print f[1],$0 # print number part and the values
}' 100012_var.txt 100013_var.txt # them files
ID Var1 Var2 Var3 Var4 Var5 Var6 Var7 Var8 Var9
100012 2.97 3.61 -1.88 -0.38 2.33 -0.22 0.76 -0.71 -0.97
100013 -1.21 1.79 -0.88 -0.91 2.01 2.88 0.32 -1.15 2.70