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

时间:2018-03-26 23:58:37

标签: bash awk printing echo cat

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

  1. 所需的输出格式(减去子弹点):

     1 1 000
     1 1 001
     ....
     1 1 177
     1 2 000
     1 2 001
     ...
     1 2 177
    
  2. 我当前的脚本打印输出ID#和session#仅打印在每个人的178行的第一行,剩下的177值打印到ID#下面的第1列,例如:< / p>

     1 1 000
     001
     002
     ...
     177
     1 2 000
     001
     002
     ...
     177
     2 1 000
     001
     ...
    
  3. 我想帮助获取从每个人的个人.txt文件中获取的178行中的每一行旁边的ID#和session#,而不仅仅是当前打印的第一行。

    以下代码:

    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  
    

1 个答案:

答案 0 :(得分:1)

$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