代码之家  ›  专栏  ›  技术社区  ›  ayherrera

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

  •  2
  • ayherrera  · 技术社区  · 7 年前

    我正在尝试连接多个。将txt文件合并为一个。txt文件。每个文件都有一列178行,并与一个特定的人关联。我希望连接的文件有三列:person’s ID#;个人会话#;从个人获取的值。txt文件,例如:

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

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

       1 1 000
       001
       002
       ...
       177
       1 2 000
       001
       002
       ...
       177
       2 1 000
       001
       ...
      

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

    代码如下:

    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 回复  |  直到 7 年前
        1
  •  1
  •   Barmar    7 年前

    $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