bash-在新txt文件中多行打印id号

bash-在新txt文件中多行打印id号,bash,awk,printing,echo,cat,Bash,Awk,Printing,Echo,Cat,我正在尝试将多个.txt文件连接到一个.txt文件中。每个单独的文件有一列178行,并与一个特定的人绑定。我希望连接的文件有三列:person's ID#;个人会议#;取自单个.txt文件的值,例如: 所需的输出格式(减去项目符号): 我当前的脚本只在每个人的178行中的第一行打印ID#和session#的输出,其余177个值打印到ID#下的第1列,例如: 我想帮助您在每个人的个人.txt文件中的178行旁边获取ID和会话,而不仅仅是当前打印的第一行 代码如下: for subject in

我正在尝试将多个.txt文件连接到一个.txt文件中。每个单独的文件有一列178行,并与一个特定的人绑定。我希望连接的文件有三列:person's ID#;个人会议#;取自单个.txt文件的值,例如:

  • 所需的输出格式(减去项目符号):

  • 我当前的脚本只在每个人的178行中的第一行打印ID#和session#的输出,其余177个值打印到ID#下的第1列,例如:

  • 我想帮助您在每个人的个人.txt文件中的178行旁边获取ID和会话,而不仅仅是当前打印的第一行

    代码如下:

    for subject in 170; do
        for session in 1 2; do
    
            cd ${datadir}
                ts_SalienceNetwork=$(cat sub${subject}.txt | awk '{print $1}')
    
                echo -e "${subject}\t${session}\t${ts_SalienceNetwork}" >> concat_data.txt
    
        done
    done  
    

    $t_SalienceNetwork
    包含整个文件,您只需将其他变量放在它前面,而不是每行前面

    使用
    awk
    打印每行的第一列,每行前面都有变量,不需要变量

    cd "$datadir" # no need to do this each time through the loop
    for subject in 170; do
        for session in 1 2; do
            awk -v subject="$subject" -v session="$session" '{printf("%s\t%s\t%s\n", subject, session, $1)}' "sub$subject.txt"
        done
    done >> concat_data.txt
    

    170中的
    主题如何在输出中打印为1?karakfa,为混淆道歉。它不打印“1”,而是为它从(170到192)中获取数据值的每个单独数据文件打印正确的主题。您也可以在Awk中对会话循环进行编码。处理不同的主题会更加烦躁-这个循环最好留在shell中。@Barmar谢谢。我是新来的,非常感谢你的帮助。我将在多个目录中循环,每个目录都有自己的文件,这就是为什么我在for循环中有cd$datadir/$subject。ts_SalienceNetwork变量保存个人的sub${subject}.txt中的数据,然后打印到concat_data.txt。在concat_data.txt文件中,我希望前两列指出每个数据点所属的参与者和会话,每个人和每个会话将有178行。您的建议是否仍适用于此设置?谢谢
    
    for subject in 170; do
        for session in 1 2; do
    
            cd ${datadir}
                ts_SalienceNetwork=$(cat sub${subject}.txt | awk '{print $1}')
    
                echo -e "${subject}\t${session}\t${ts_SalienceNetwork}" >> concat_data.txt
    
        done
    done  
    
    cd "$datadir" # no need to do this each time through the loop
    for subject in 170; do
        for session in 1 2; do
            awk -v subject="$subject" -v session="$session" '{printf("%s\t%s\t%s\n", subject, session, $1)}' "sub$subject.txt"
        done
    done >> concat_data.txt