【问题标题】:cat specific columns in 3 filescat 3 个文件中的特定列
【发布时间】:2020-03-02 00:18:17
【问题描述】:

我有 3 个文件,例如:

file1_file:

scaffold_159    625 YP_009345712    0.284   447 289 9   96675   95377   196 625 6.963E-38   158
scaffold_159    625 YP_009345714    0.284   447 289 9   96675   95377   196 625 6.963E-38   158
IDBA_scaffold_24562 625 YP_009345713    0.464   56  20  2   2549    2686    10  65  7.513E-03   37

file2_file:

scaffold_159    625 YP_009345717    0.284   447 289 9   96675   95377   196 625 6.963E-38   158
scaffold_159    625 YP_009345718    0.284   447 289 9   96675   95377   196 625 6.963E-38   158
IDBA_scaffold_24562 625 YP_009345719    0.464   56  20  2   2549    2686    10  65  7.513E-03   37

file3_file:

scaffold_159    625 YP_009345711    0.284   447 289 9   96675   95377   196 625 6.963E-38   158
scaffold_159    625 YP_009345723    0.284   447 289 9   96675   95377   196 625 6.963E-38   158
IDBA_scaffold_24562 625 YP_009345721    0.464   56  20  2   2549    2686    10  65  7.513E-03   37

我只想在单个new_file.txt 中获取 3 个文件的第 3 部分。

我应该得到:

YP_009345712
YP_009345714
YP_009345713
YP_009345717
YP_009345718
YP_009345711
YP_009345723
YP_009345721

从现在开始我尝试了:

cat file_names.txt | while read line; do cat /path1/${line}/path2/${line}_file > new_file.txt; done

file_names.txt我有:

file1
file2
file3

但我不知道如何只提取第 3 列...

Ps:3个文件不在同一个目录:

/path1/file1/path2/file1_file 
/path1/file2/path2/file2_file 
/path1/file3/path2/file3_file 

【问题讨论】:

    标签: awk sed cat xargs


    【解决方案1】:

    编辑: 与 OP 聊天后得知他/她的文件可能位于不同的位置,所以在这种情况下,请您尝试关注。考虑到您有一个 Input_file ,其中所有文件名都在那里。我还没有测试它。

    file_name=$(awk '{val=(val?val OFS:"")"/path1/" $0 "/path2/" $0} END{print val}' file_names.txt)
    awk '{print $3}' "$file_name"
    

    awk '{print $3}' $(awk '{val=(val?val OFS:"")"/path1/" $0 "/path2/" $0} END{print val}' file_names.txt)
    


    你可以在这里使用awk

    awk '{print $3}' /complete_path/file1 /complete_path/file2  /complete_path/file3
    

    【讨论】:

    • @chippycentra,请检查我的编辑解决方案,如果有任何疑问,请告诉我。
    【解决方案2】:

    我认为使用

    可以更简单
    $ sed 's_.*_"path1/&/path2/&"_' filenames | xargs awk '{print $3}'
    

    awk 只会被调用一次。

    【讨论】:

      【解决方案3】:

      所以你有一个包含数百个字符串的文件fnames.txt

      str1
      str2
      str3
      str4
      ...
      

      每个字符串代表一个文件位于

      /path1/${str}/path2/${str}_file
      

      其中${str} 是来自文件fnames.txt 的值。

      现在您只想从第三个文件中读取第三列:

      $ str="$(awk '(NR==3){print; exit}' fnames.txt)"
      $ file="/path1/${str}/path2/${str}_file"
      $ awk '{print $3}' "$file" > new_file.txt
      

      永远记住KISS principle

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-09-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多