如何将文件名作为awk输出到列中?

ivivek_ngs

我试图在目录中几个文件的内容中执行一些grep并将我的grep匹配附加到一个文件中,在我的输出中,我还想要一列同时具有文件名以了解从哪个文件中选择了该条目向上。我试图将awk用于相同的功能,但是没有用。

for i in *_2.5kb.txt; do more $i | grep "NM_001080771" | echo `basename $i` | awk -F'[_.]' '{print $1"_"$2}' | head >> prom_genes_2.5kb.txt; done

文件名是这样的,我大约有50个文件

    48hrs_CT_merged_peaks_2.5kb.txt
    48hrs_TAMO_merged_peaks_2.5kb.txt
    72hrs_TAMO_merged_peaks_2.5kb.txt
    72hrs_CT_merged_peaks_2.5kb.txt
    5D_CT_merged_peaks_2.5kb.txt
    5D_TAMO_merged_peaks_2.5kb.txt

每个文件内容多行

chr1    3663275 3663483 14  2.55788 2.99631 1.40767 NM_001011874    -
chr1    4481687 4488063 264 7.85098 28.25170    26.41094    NM_011441   -
chr1    5008006 5013929 243 8.20677 26.17854    24.37907    NM_021374   -
chr1    5578362 5579949 65  3.48568 7.83501 6.57570 NM_011011   +
chr1    5905702 5908002 148 5.84647 16.53171    14.88463    NM_010342   -
chr1    9288507 9290352 77  4.04459 9.12442 7.77642 NM_027671   -
chr1    9291742 9292528 142 5.74749 16.21792    14.28185    NM_027671   -
chr1    9535689 9536176 72  4.45286 8.82567 7.29563 NM_021511   +
chr1    9535689 9536176 72  4.45286 8.82567 7.29563 NM_175236   +
chr1    9535689 9536176 72  4.45286 8.82567 7.29563 NR_027664   +

当我得到一个匹配项时,"NM_001080771"我将该行的全部内容打印到一个新文件中,对于每个文件,此操作都已完成并将匹配项附加到一个输出文件中。我还想在最终输出中添加一个如上所示的文件名列,以便知道从哪个文件获取条目。

期望的输出

chr4    21610972    21618492    193 7.28409 21.01724    19.35525    NM_001080771    -   48hrs_CT
chr4    21605096    21618696    76  4.22442 9.32981 7.68131 NM_001080771    -   48hrs_TAMO
chr4    21604864    21618713    12  1.78194 2.36793 1.25883 NM_001080771    -   72hrs_CT
chr4    21610305    21615717    26  2.90579 4.47333 2.65353 NM_001080771    -   72hrs_TAMO
chr4    21609924    21618600    23  2.63778 4.0642  2.33685 NM_001080771    -   5D_CT
chr4    21609936    21618680    30  5.63778 3.0642  8.33685 NM_001080771    -   5D_TAMO

这是行不通的。我想基本上添加一列,其中文件名也应添加为第一列或最后一列的条目。怎么做?

约翰·哈斯考尔

只要文件数量不多,为什么不这样做:

grep NM_001080771 *_2.5kb.txt | awk -F: '{print $2,$1}'

如果您有太多文件无法使用,这是一种基于脚本的方法,该方法使用awk附加文件名:

#!/bin/sh
for i in *_2.5kb.txt; do
    < $i grep "NM_001080771" | \
        awk -v where=`basename $i` '{print $0,where}'
done

./thatscript | head > prom_genes_2.5kb.txt

在这里,我们使用awk的-v VAR=VALUE命令行功能来传递文件名(因为我们使用的是stdin,因此awk的内置FILENAME变量没有任何用处)

您还可以在@karakfa的优雅的awk-only方法周围使用这样的循环:

#!/bin/sh
for i in *_2.5kb.txt; do
    awk '/NM_001080771/ {print $0, FILENAME}' $i
done

最后,这是一个需要修改文件名的版本:

#!/bin/sh
for i in *_2.5kb.txt; do
      awk -v TAG=${i%_merged_peaks_2.5kb.txt} '/NM_001080771/ {print $0, TAG}' $i
done

(这使用shell的变量替换从的末尾${variable%pattern}开始修剪patternvariable

奖金

猜测您将来可能要搜索其他字符串,那么为什么我们不像这样传递搜索字符串:

#!/bin/sh
what=${1?Need search string}
for i in *_2.5kb.txt; do
  awk -v TAG=${i%_merged_peaks_2.5kb.txt} /${what}/' {print $0, TAG}' $i
done

./thatscript NM_001080771 | head > prom_genes_2.5kb.txt

还需要编辑

或者,如果您出于病态的需要而使事情变得过于复杂和繁琐,甚至在5行“ throwaway”脚本中也是如此:

#!/bin/sh
shopt -s nullglob

what="${1?Need search string}"
filematch="*_2.5kb.txt"
trimsuffix="_merged_peaks_2.5kb.txt"

for filename in $filematch; do
    awk -v tag="${filename%${trimsuffix}}" \
        -v what="${what}" \
        '$0 ~ what {print $0, tag}' $filename
done

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Bash脚本:如何将文件名作为标头导出到csv

来自分类Dev

如何将文件名作为.BAT文件调用中的参数传递

来自分类Dev

如何将输出写入文件,文件名作为第二个参数传递?

来自分类Dev

如何将 os.path 的文件名作为字符串返回?

来自分类Dev

使用文件名作为数据帧中的列标题

来自分类Dev

如何让wget使用直接URL文件名作为缩短URL的输出文件名

来自分类Dev

多个输入文件名作为 R 中的输出文件名

来自分类Dev

如何将功能输出到文件中

来自分类Dev

如何将包含空格的文件名作为参数传递给命令行程序?

来自分类Dev

如何将包含空格的文件名作为参数传递给命令行程序?

来自分类Dev

如何将变量输出到文件?

来自分类Dev

如何使用文件名作为变量

来自分类Dev

如何将非零列名作为Pandas中另一列的值

来自分类Dev

如何将文件中的路径名作为参数传递给Shell脚本?

来自分类Dev

如何将“a.csv”文件添加到现有的Excel文件“b.xlsx”中作为一个新的工作表,csv文件名作为Python中的工作表名称?

来自分类Dev

如何将Powershell函数的输出输出到txt等输出文件中?

来自分类Dev

如何将for循环内的整数作为十六进制值输出到文件

来自分类Dev

如何将for循环内的整数作为十六进制值输出到文件

来自分类Dev

如何将几个文件的文件名导出到Excel工作表中?

来自分类Dev

如何将awk结果输出到变量

来自分类Dev

以文件名作为列标题将多个* .txt文件读入Pandas Dataframe

来自分类Dev

PowerShell 将文本作为表/列输出到文件

来自分类Dev

如何将.html文件输出到.doc文件Django

来自分类Dev

复制具有文件名作为列标题的列

来自分类Dev

如何在bash中打印以给定文件名作为stdin的文件的内容?

来自分类Dev

如何在bash中打印以给定文件名作为stdin的文件的内容?

来自分类Dev

Shell 脚本:将文件名作为参数,并在标准输出上显示文件的内容,并带有行号前缀

来自分类Dev

将多个CSV合并为一个,文件名作为Pandas中的列名

来自分类Dev

将多个 CSV 合并到一个 DataFrame 中,文件名作为列名

Related 相关文章

  1. 1

    Bash脚本:如何将文件名作为标头导出到csv

  2. 2

    如何将文件名作为.BAT文件调用中的参数传递

  3. 3

    如何将输出写入文件,文件名作为第二个参数传递?

  4. 4

    如何将 os.path 的文件名作为字符串返回?

  5. 5

    使用文件名作为数据帧中的列标题

  6. 6

    如何让wget使用直接URL文件名作为缩短URL的输出文件名

  7. 7

    多个输入文件名作为 R 中的输出文件名

  8. 8

    如何将功能输出到文件中

  9. 9

    如何将包含空格的文件名作为参数传递给命令行程序?

  10. 10

    如何将包含空格的文件名作为参数传递给命令行程序?

  11. 11

    如何将变量输出到文件?

  12. 12

    如何使用文件名作为变量

  13. 13

    如何将非零列名作为Pandas中另一列的值

  14. 14

    如何将文件中的路径名作为参数传递给Shell脚本?

  15. 15

    如何将“a.csv”文件添加到现有的Excel文件“b.xlsx”中作为一个新的工作表,csv文件名作为Python中的工作表名称?

  16. 16

    如何将Powershell函数的输出输出到txt等输出文件中?

  17. 17

    如何将for循环内的整数作为十六进制值输出到文件

  18. 18

    如何将for循环内的整数作为十六进制值输出到文件

  19. 19

    如何将几个文件的文件名导出到Excel工作表中?

  20. 20

    如何将awk结果输出到变量

  21. 21

    以文件名作为列标题将多个* .txt文件读入Pandas Dataframe

  22. 22

    PowerShell 将文本作为表/列输出到文件

  23. 23

    如何将.html文件输出到.doc文件Django

  24. 24

    复制具有文件名作为列标题的列

  25. 25

    如何在bash中打印以给定文件名作为stdin的文件的内容?

  26. 26

    如何在bash中打印以给定文件名作为stdin的文件的内容?

  27. 27

    Shell 脚本:将文件名作为参数,并在标准输出上显示文件的内容,并带有行号前缀

  28. 28

    将多个CSV合并为一个,文件名作为Pandas中的列名

  29. 29

    将多个 CSV 合并到一个 DataFrame 中,文件名作为列名

热门标签

归档